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