Golang实战项目-B2C电商平台项目(6)

Golang实战项目-B2C电商平台项目(6)

商品新增中上传图片
  • 商品新增中上传图片使用的是KindEditor的多文件上传组件.文件上传为异步上传方式.可以上传多个文件.
  • 当文件上传后要求服务器端返回数据格式如下.应该是map转换为json而不应该是结构体转换为json
    • error:表示图片上传的状态
    • url:表示图片上传后回显地址
    • message:表示图片上传失败后显示的内容
  • 上传图片域的默认名称为imgFile
  • 多文件上传本质是每次上传一张图片,多次调用同一个控制器
  • 在保存图片时要考虑图片重名的问题,使用随机数+时间戳保证图片名称唯一
import "github.com/gorilla/mux"

var (
	Router              = mux.NewRouter()
	CurrPath            = "http://localhost:80/"           //当前项目url
	HEADER_CONTENT_TYPE = "Content-Type"                   //Content-Type
	JSON_HEADER         = "application/json;charset=utf-8" //json
)
  • 在item/TbItemService.go添加函数实现图片上传
func imageUploadService(f multipart.File, h *multipart.FileHeader) map[string]interface{} {
	m := make(map[string]interface{})
	b, err := ioutil.ReadAll(f)
	if err != nil {
		m["error"] = 1
		m["message"] = "上传失败,服务器错误"
		return m
	}
	//纳秒时间戳+随机数+扩展名
	rand.Seed(time.Now().UnixNano())
	fileName := "static/images/" + strconv.Itoa(int(time.Now().UnixNano())) + strconv.Itoa(rand.Intn(1000)) + h.Filename[strings.LastIndex(h.Filename, "."):]
	err = ioutil.WriteFile(fileName, b, 0777)
	if err != nil {
		m["error"] = 1
		m["message"] = "上传失败,保存图片时错误"
		return m
	}
	m["error"] = 0
	m["url"] = commons.CurrPath + fileName
	return m
}
  • 在item/TbItemController.go添加函数,并配置映射
//图片上传
func imagesUploadController(w http.ResponseWriter, r *http.Request) {
	file,fileHeader,err:=r.FormFile("imgFile")
	if err!=nil{
		m:=make(map[string]interface{})
		m["error"]=1
		m["message"]="接收图片失败"
		b,_:=json.Marshal(m)
		w.Header().Set(commons.HEADER_CONTENT_TYPE,commons.JSON_HEADER)
		w.Write(b)
		return
	}
	m:=imageUploadService(file,fileHeader)
	b,_:=json.Marshal(m)
	w.Header().Set(commons.HEADER_CONTENT_TYPE,commons.JSON_HEADER)
	w.Write(b)
}

func ItemHandler() {
	commons.Router.HandleFunc("/showItem", showItemController)
	commons.Router.HandleFunc("/item/delete", delByIdsController)
	commons.Router.HandleFunc("/item/instock", instockController)
	commons.Router.HandleFunc("/item/offstock", offstockController)
	commons.Router.HandleFunc("/item/imageupload", imagesUploadController)//图片上传
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值