Golang实战项目-B2C电商平台项目

Posted 旧时星空

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang实战项目-B2C电商平台项目相关的知识,希望对你有一定的参考价值。

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)//图片上传
}

以上是关于Golang实战项目-B2C电商平台项目的主要内容,如果未能解决你的问题,请参考以下文章

Golang实战项目-B2C电商平台

Golang实战项目-B2C电商平台项目

Golang实战项目-B2C电商平台项目

Golang实战项目-B2C电商平台项目

Golang实战项目-B2C电商平台项目

Golang实战项目-B2C电商平台