1. 程式人生 > 其它 >element檔案上傳,狀態碼500,排除思路

element檔案上傳,狀態碼500,排除思路

伺服器返回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,
		},
	})
}