package main import ( "fmt" "image" _ "image/gif" _ "image/jpeg" _ "image/png" "github.com/makiuchi-d/gozxing" "github.com/makiuchi-d/gozxing/qrcode" "github.com/gin-gonic/gin" "net/http" "io" ) func main() { router := gin.Default() router.POST("/upload", func(c *gin.Context) { // The default memory allocation is 10M file, err := c.FormFile("filename") if err != nil { c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", err.Error())) return } //文件大小限制 if file.Size > (10 << 20) { c.String(http.StatusBadRequest, fmt.Sprintf("get form err: %s", "文件太大,请重新上传")) return } c.String(http.StatusOK, fmt.Sprintf("File %s uploaded success", file.Filename)) //fmt.Println(file.Filename, "文件名") fi, err := file.Open() if err != nil { fmt.Println(err) } defer fi.Close() str := GetPaymentStr(fi).String() fmt.Println("qrcode_url:", str) }) router.Run(":8000") } func GetPaymentStr(fi io.Reader) (paymentCodeUrl *gozxing.Result) { img, _, err := image.Decode(fi) if err != nil { fmt.Println(err) } // prepare BinaryBitmap bmp, _ := gozxing.NewBinaryBitmapFromImage(img) // decode image qrReader := qrcode.NewQRCodeReader() result, err := qrReader.Decode(bmp, nil) if err != nil { fmt.Println(err) } return result }