element檔案上傳,狀態碼500,排除思路
阿新 • • 發佈:2021-12-20
伺服器返回500,伺服器內部錯誤,經過斷點測試,發現是接受前端圖片時,產生的錯誤;
檢查前端請求的表單資料,發現圖片的是file,後端程式碼中使用了錯誤的欄位來接收,修改後,測試通過
前端程式碼
<!-- 產品圖片上傳 --> <el-upload class="upload-demo" action="http://localhost:8082/api/Product/imageUpload" :on-remove="handleRemove" :data="ProductImageUploadData" multiple :limit="3" > <el-button size="small" type="primary">點選上傳</el-button> <div slot="tip" class="el-upload__tip">只能上傳jpg/png檔案,且不超過500kb</div> </el-upload>
後端程式碼
func ProductImageUpload(c *gin.Context) { ProductId := tools.StrToUInt(strings.TrimSpace(c.PostForm("ProductId"))) //資料驗證 ProductImage := &model.ProductImage{ ProductId: ProductId, //傳入的視訊連結分類 } // 插入資料進入資料庫 :之前儲存圖片 // **********獲取上傳的檔案:圖片HeadImg: //並把上傳的圖片的名稱改為當前的uuid儲存(保證圖片封面是唯一的),ulr+名稱寫入資料庫=HeadImgUrl //HeadImgfile, err := c.FormFile("file") HeadImgfile, err := c.FormFile("file") //HeadImgfile, err := c.FormFile("HeadImgfile") // 上傳的檔案獲取字尾名 判斷型別是否正確 .jpg .png .gif .jpeg extName := path.Ext(HeadImgfile.Filename) allowExtMap := map[string]bool{ ".jpg": true, ".png": true, ".gif": true, ".jpeg": true, ".bmp": true, } if _, ok := allowExtMap[extName]; !ok { c.JSON(200, gin.H{ "data": gin.H{ //"err": err, }, "meta": gin.H{ "msg": "上傳圖片的檔案型別不合法", "status": 400, }}) //c.String(200, "上傳圖片的檔案型別不合法") return } //static\images\ProductImage //建立圖片儲存目錄 ./static/video/headimg/ dir := "./static/images/ProductImage/" err = os.MkdirAll(dir, 0666) if err != nil { fmt.Println(err) c.String(200, "MkdirAll失敗") return } //讀取.ini裡面的資料庫配置 config, err := ini.Load("./config/app.ini") if err != nil { //失敗 fmt.Printf("Fail to read file: %v", err) os.Exit(1) } ipPort := config.Section("serve").Key("ipPort").String() var url = "http://" + ipPort + "/static/images/ProductImage/" // 4、生成檔名稱和檔案儲存的目錄 111111111111.jpeg var ImageUid = uuid.NewV4() //保證上傳的每張圖片時唯一的 //產品ID--UUID-檔案型別字尾 fileName := tools.UintToString(ProductId) + "--" + ImageUid.String() + extName fmt.Println(fileName) //fileName := extName //fmt.Println(video.ID) // 5、執行上傳 dst := path.Join(dir, fileName) c.SaveUploadedFile(HeadImgfile, dst) ////生成HeadImgUrl請求地址,儲存進入資料庫 var HeadImgUrl = url + fileName fmt.Println(HeadImgUrl) //video.HeadImgUrl=HeadImgUrl //var ProductImg model.ProductImage{} //common.DB.Model(&).Update("head_img_url", HeadImgUrl) ProductImage.Url = HeadImgUrl if err := common.DB.Create(&ProductImage).Error; err != nil { c.JSON(200, gin.H{ "data": gin.H{ "err": err, }, "meta": gin.H{ "msg": "資料寫入資料庫失敗", "status": 400, }}) return } // 成功 c.JSON(200, gin.H{ "data": gin.H{ "ProductImage": ProductImage, }, "meta": gin.H{ "msg": "圖片上傳成功", "status": 200, }, }) }