博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
和lock一起学beego 博客系统开发为例(七)
阅读量:7022 次
发布时间:2019-06-28

本文共 3405 字,大约阅读时间需要 11 分钟。

  hot3.png

接着上篇来写《》

这篇主要完成以下事项:

下篇我们要完成下面三个任务:

1、单图上传

2、多图上传

关于图片上传的功能介绍完,博客系统基本开发流程也要结束了。下一篇会把简易博客发布到github上去,让新手参考~

本节准备就写一个图片上传功能的,但在beego里,单图与多图上传处理稍有不同。在这里分开介绍。

一、单图上传

在控制器文件夹,default.go下:

//单文件上传type UploadController struct {	BaseController}func (this *UploadController) Post() {	if !this.isLogin {		this.Data["json"] = map[string]interface{}{"error": 1, "message": "你没有权限上传"}		this.ServeJSON()		return	}	//imgFile	f, h, err := this.GetFile("imgFile")	defer f.Close()	//生成上传路径	now := time.Now()	dir := "./static/uploadfile/" + strconv.Itoa(now.Year()) + "-" + strconv.Itoa(int(now.Month())) + "/" + strconv.Itoa(now.Day())	err1 := os.MkdirAll(dir, 0755)	if err1 != nil {		this.Data["json"] = map[string]interface{}{"error": 1, "message": "目录权限不够"}		this.ServeJSON()		return	}	//生成新的文件名	filename := h.Filename	ext := utils.SubString(filename, strings.LastIndex(filename, "."), 5)	filename = utils.GetGuid() + ext	if err != nil {		this.Data["json"] = map[string]interface{}{"error": 1, "message": err}	} else {		//this.SaveToFile("imgFile", "./static/uploadfile/"+h.Filename)		this.SaveToFile("imgFile", dir+"/"+filename)		this.Data["json"] = map[string]interface{}{"error": 0, "url": strings.Replace(dir, ".", "", 1) + "/" + filename}	}	this.ServeJSON()}

说明:在beego里获取图片是要用到“GetFile”方法来获取,参数就是input file的名称,上传后我们要创建以日期格式的文件夹来存图片,再把图片以时间格式命名,最后“SaveToFile”来保存。

上传的路由:

beego.Router("/upload", &controllers.UploadController{})

模板:

二、多图上传

//多文件上传type UploadMultiController struct {	BaseController}func (this *UploadMultiController) Post() {	if !this.isLogin {		this.Data["json"] = map[string]interface{}{"code": 0, "message": "你没有权限上传"}		this.ServeJSON()		return	}	files, err := this.GetFiles("uploadFiles")	if err != nil {		this.Data["json"] = map[string]interface{}{"code": 0, "message": "目录权限不够"}		this.ServeJSON()		return	}	//生成上传路径	now := time.Now()	dir := "./static/uploadfile/" + strconv.Itoa(now.Year()) + "-" + strconv.Itoa(int(now.Month())) + "/" + strconv.Itoa(now.Day())	err1 := os.MkdirAll(dir, 0755)	if err1 != nil {		this.Data["json"] = map[string]interface{}{"code": 0, "message": "目录权限不够"}		this.ServeJSON()		return	}	resfilestr := ""	resfilename := ""	for i, _ := range files {		file, err := files[i].Open()		defer file.Close()		if err != nil {			this.Data["json"] = map[string]interface{}{"code": 0, "message": err}			this.ServeJSON()			return		}		//生成新的文件名		filename := files[i].Filename		resfilename += utils.GetFileSuffix(filename) + "||"		ext := utils.SubString(filename, strings.LastIndex(filename, "."), 5)		filename = utils.GetGuid() + ext		dst, err := os.Create(dir + "/" + filename)		defer dst.Close()		if err != nil {			this.Data["json"] = map[string]interface{}{"code": 0, "message": err}			this.ServeJSON()			return		}		if _, err := io.Copy(dst, file); err != nil {			this.Data["json"] = map[string]interface{}{"code": 0, "message": err}			this.ServeJSON()			return		}		resfilestr += strings.Replace(dir, ".", "", 1) + "/" + filename + "||"	}	this.SetSession("uploadMultiPic", resfilestr)	this.SetSession("uploadMultiName", resfilename)	this.Data["json"] = map[string]interface{}{"code": 1, "message": "上传成功", "url": resfilestr}	this.ServeJSON()	return}

说明:多图与单图类似,不过用到的方法是“GetFiles”,同样是创建以日期形式的文件夹;因为是多图,所以要for循环获取。

路由:

beego.Router("/uploadmulti", &controllers.UploadMultiController{})

模板:

好了,到此博客系统开发的讲解结束了,下篇把github地址公开,顺便截几张预览图片放出来~

转载于:https://my.oschina.net/lockupme/blog/699371

你可能感兴趣的文章
2016第5周三
查看>>
Spring学习10-SpringMV核心组件2及SpringMVC项目示例
查看>>
hdu 5620 KK's Steel(推理)
查看>>
(笔记)电路设计(十五)之基本电路单元的认识
查看>>
nginx 日志获取不到远程访问ip问题解决
查看>>
有若干个字符串,比較找出当中最大者
查看>>
开源 免费 java CMS - FreeCMS2.0 会员我的评论
查看>>
Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签 《转载》
查看>>
数据库读写分离的初步理解
查看>>
[转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃
查看>>
Centos7安装完毕后重启提示Initial setup of CentOS Linux 7 (core)的解决方法
查看>>
Codeforces Beta Round #9 (Div. 2 Only) A. Die Roll 水题
查看>>
swift和 oc 混编2-备
查看>>
2015-2016-2 《Java程序设计》 游戏化
查看>>
代码的组织机制
查看>>
html基础之 input:type
查看>>
json-lib简单处理json和对json的简单介绍
查看>>
SQL学习之用通配符进行数据过滤
查看>>
jquery checkbox选中、改变状态、change和click事件
查看>>
java joor 实现反射简单调用
查看>>