Advertisement
echoslider

Untitled

Sep 1st, 2023 (edited)
1,230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 4.11 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "crypto/md5"
  5.     "encoding/hex"
  6.     "fmt"
  7.     "io"
  8.     "net/http"
  9.     "os"
  10.     "path/filepath"
  11.     "sync"
  12.     "time"
  13.     "strings"
  14.     "io/ioutil"
  15.     "image/png"
  16.  
  17.     "github.com/boombuler/barcode"
  18.     "github.com/boombuler/barcode/qr"
  19. )
  20.  
  21. const (
  22.     imageDir    = "C:\\bilder\\"
  23.     qrDir       = "C:\\bilder\\qr\\"
  24.     webServerIP = "localhost"
  25.     webServerPort = "5000"
  26.     scanInterval = 5 * time.Second
  27. )
  28.  
  29. var (
  30.     scannedFiles   = make(map[string]struct{})
  31.     scannedFilesMu sync.Mutex
  32. )
  33.  
  34. func main() {
  35.     // Starte den Hintergrund-Scan-Prozess
  36.     go startScanProcess()
  37.  
  38.     // Starte den Webserver
  39.     startWebServer()
  40. }
  41.  
  42. func startScanProcess() {
  43.     ticker := time.NewTicker(scanInterval)
  44.     defer ticker.Stop()
  45.  
  46.     for {
  47.         select {
  48.         case <-ticker.C:
  49.             scanForNewImages()
  50.         }
  51.     }
  52. }
  53.  
  54. func scanForNewImages() {
  55.     files, err := ioutil.ReadDir(imageDir)
  56.     if err != nil {
  57.         fmt.Println("Fehler beim Lesen des Bilderverzeichnisses:", err)
  58.         return
  59.     }
  60.  
  61.     for _, file := range files {
  62.         if file.IsDir() {
  63.             continue
  64.         }
  65.  
  66.         filename := file.Name()
  67.  
  68.         scannedFilesMu.Lock()
  69.         _, alreadyScanned := scannedFiles[filename]
  70.         scannedFilesMu.Unlock()
  71.  
  72.         if !alreadyScanned {
  73.             // Erzeuge MD5-Hash-Code und benenne das Bild um
  74.             if hashStr := generateMD5Hash(filepath.Join(imageDir, filename)); hashStr != "" {
  75.                 scannedFilesMu.Lock()
  76.                 scannedFiles[filename] = struct{}{}
  77.                 scannedFilesMu.Unlock()
  78.  
  79.                 // Erzeuge QR-Code mit dem Pfad
  80.                 qrCodeURL := fmt.Sprintf("http://%s:%s/api/view/%s", webServerIP, webServerPort, hashStr)
  81.                 qrPath := filepath.Join(qrDir, hashStr+".png")
  82.                 generateQRCode(qrCodeURL, qrPath)
  83.  
  84.  
  85.             }
  86.         }
  87.     }
  88. }
  89.  
  90.  
  91. func generateMD5Hash(filePath string) string {
  92.     // oeffne die Datei
  93.     file, err := os.Open(filePath)
  94.     if err != nil {
  95.         fmt.Println("Fehler beim Oeffnen der Datei:", err)
  96.         return ""
  97.     }
  98.    
  99.  
  100.     // Berechne den MD5-Hash
  101.     hash := md5.New()
  102.     if _, err := io.Copy(hash, file); err != nil {
  103.         fmt.Println("Fehler beim Berechnen des MD5-Hashes:", err)
  104.         return ""
  105.     }
  106.  
  107.     file.Close()
  108.  
  109.     // Konvertiere den Hash in einen hexadezimalen String
  110.     hashStr := hex.EncodeToString(hash.Sum(nil))
  111.  
  112.     // Benenne die Originalbilddatei in ihren MD5-Hash um
  113.     newImagePath := filepath.Join(imageDir, hashStr)
  114.     err = os.Rename(filePath, newImagePath)
  115.     if err != nil {
  116.         fmt.Println("Fehler beim Umbenennen der Datei:", err)
  117.         return ""
  118.     }
  119.  
  120.     return hashStr
  121. }
  122.  
  123. func generateQRCode(qrCodeURL, qrPath string) {
  124.     // Erzeuge den QR-Code
  125.     qrCode, err := qr.Encode(qrCodeURL, qr.L, qr.Auto)
  126.     if err != nil {
  127.         fmt.Println("Fehler beim Erstellen des QR-Codes:", err)
  128.         return
  129.     }
  130.  
  131.     // Erzeuge das QR-Code-Bild
  132.     qrCodeImage, err := barcode.Scale(qrCode, 200, 200)
  133.     if err != nil {
  134.         fmt.Println("Fehler beim Skalieren des QR-Codes:", err)
  135.         return
  136.     }
  137.  
  138.     // Speichere das QR-Code-Bild
  139.     qrCodeFile, err := os.Create(qrPath)
  140.     if err != nil {
  141.         fmt.Println("Fehler beim Erstellen des QR-Code-Bildes:", err)
  142.         return
  143.     }
  144.     defer qrCodeFile.Close()
  145.  
  146.     if err := png.Encode(qrCodeFile, qrCodeImage); err != nil {
  147.         fmt.Println("Fehler beim Speichern des QR-Codes:", err)
  148.         return
  149.     }
  150. }
  151.  
  152. func startWebServer() {
  153.     http.HandleFunc("/api/view/", viewHandler)
  154.     addr := webServerIP + ":" + webServerPort
  155.     fmt.Println("Webserver gestartet auf", addr)
  156.     http.ListenAndServe(addr, nil)
  157. }
  158.  
  159. func viewHandler(w http.ResponseWriter, r *http.Request) {
  160.     // Holen Sie den MD5-Hash-Code aus der URL
  161.     hashcode := strings.TrimPrefix(r.URL.Path, "/api/view/")
  162.     imagePath := filepath.Join(imageDir, hashcode)
  163.  
  164.     // Senden Sie das Bild als Antwort
  165.     http.ServeFile(w, r, imagePath)
  166. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement