当前位置: 首页 > news >正文

南山网站制作联系电话芒果国际影城星沙店

南山网站制作联系电话,芒果国际影城星沙店,社区电商平台怎么做,wordpress生活类主题Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例#xff08;单文件#xff09;1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 … Go web框架——Gin文件上传与下载 1. 文件上传1.1 入门案例单文件1.2 服务端保存文件的几种方式SaveUploadedFileCreateCopy 1.3 读取上传的文件1.4 多文件上传 2. 文件下载2.1 快速入门2.2 前后端模式下的文件下载2.3 中文乱码问题 1. 文件上传 1.1 入门案例单文件 func main() {router : gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)// 单位是字节 是左移预算符号等价于 8 * 2^20// gin对文件上传大小的默认值是32MB// 1. 设置路由器的最大内存限制为8MB用于处理multipart表单数据中的文件上传。router.MaxMultipartMemory 8 20 // 8 MiB// 2. 定义一个路由处理函数router.POST(/upload, func(c *gin.Context) {// 单文件// 3.通过c.FormFile函数获取HTTP请求上传的文件对象。// 其中参数file是上传表单中文件类型的name属性值。file, _ : c.FormFile(file)// 使用log包打印上传的文件名。log.Println(file.Filename)// 4. 指定上传文件的目标完整路径dst : ./ file.Filename// 5. 使用c.SaveUploadedFile函数保存文件到指定路径下。c.SaveUploadedFile(file, dst)// 6. 使用c.String函数向客户端响应上传成功信息。c.String(http.StatusOK, fmt.Sprintf(%s uploaded!, file.Filename))})router.Run(:8000) }1.2 服务端保存文件的几种方式 SaveUploadedFile func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) errorSaveUploadedFile函数用于将文件保存到指定的路径下。第一个参数是文件对象第二个参数是保存文件的路径。 CreateCopy func (c *Context) FormFile(name string) (*multipart.FileHeader, error)FormFile函数用于获取上传的文件。它返回一个文件对象其中包含了文件的元数据名称、大小等。我们可以使用这个文件对象去直接读取文件内容。 func main() {router : gin.Default()router.MaxMultipartMemory 8 20 // 8 MiBrouter.POST(/upload, func(c *gin.Context) {file, _ : c.FormFile(file)log.Println(file.Filename)// 读取文件中的数据返回文件对象fileRead, _ : file.Open()dst : ./ file.Filename// 创建一个文件out, err : os.Create(dst)if err ! nil {fmt.Println(err)}defer out.Close()// 拷贝文件对象到out中io.Copy(out, fileRead)c.String(http.StatusOK, fmt.Sprintf(%s uploaded!, file.Filename))})router.Run(:8000) }一样是使用Apifox调用没有什么毛病~ 1.3 读取上传的文件 func (c *Context) FormFile(name string) (*multipart.FileHeader, error)FormFile函数用于获取上传的文件。它返回一个文件对象其中包含了文件的元数据名称、大小等。我们可以使用这个文件对象去直接读取文件内容。 func main() {router : gin.Default()router.MaxMultipartMemory 8 20 // 8 MiBrouter.POST(/upload, func(c *gin.Context) {file, _ : c.FormFile(file)// 读取文件中的数据返回文件对象fileRead, _ : file.Open()defer fileRead.Close()data, _ : io.ReadAll(fileRead)fmt.Println(string(data))c.String(http.StatusOK, fmt.Sprintf(%s uploaded!, file.Filename))})router.Run(:8000) }在这里我们可以根据文件的内容来判断是否需要保存到服务器中。 1.4 多文件上传 func (c *Context) MultipartForm() (*multipart.Form, error)MultipartForm函数用于获取上传的表单数据。它返回一个包含了文件对象的表单对象。 func main() {router : gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)router.MaxMultipartMemory 8 20 // 8 MiBrouter.POST(/upload, func(c *gin.Context) {// Multipart formform, _ : c.MultipartForm()files : form.File[upload[]] // 注意这里名字不要对不上了for _, file : range files {log.Println(file.Filename)// 上传文件至指定目录c.SaveUploadedFile(file, ./file.Filename)}c.String(http.StatusOK, fmt.Sprintf(%d files uploaded!, len(files)))})router.Run(:8000) }2. 文件下载 2.1 快速入门 直接响应一个路径下的文件 func main() {router : gin.Default()router.GET(/download, func(c *gin.Context) {c.File(思考一个问题的四连问.txt)})router.Run(:8000) }然后直接在游览器访问就能下载到了 但是呐 有些响应比如图片浏览器就会显示这个图片而不是下载所以我们需要使浏览器唤起下载行为 c.Header(Content-Type, application/octet-stream) // 表示是文件流唤起浏览器下载一般设置了这个就要设置文件名 c.Header(Content-Disposition, attachment; filename牛逼.png) // 用来指定下载下来的文件名 c.Header(Content-Transfer-Encoding, binary) // 表示传输过程中的编码形式乱码问题可能就是因为它 c.File(uploads/12.png)完整代码 func main() {router : gin.Default()router.GET(/download, func(c *gin.Context) {c.Header(Content-Type, application/octet-stream)c.Header(Content-Disposition, attachment; filename牛逼.txt)c.File(思考一个问题的四连问.txt)})router.Run(:8000) }这样再使用游览器就直接下载了 2.2 前后端模式下的文件下载 如果是前后端模式下后端就只需要响应一个文件数据 文件名和其他信息就写在请求头中 c.Header(fileName, xxx.png) c.Header(msg, 文件下载成功) c.File(uploads/12.png)前端写法 async downloadFile(row) {this.$http({method: post,url: file/upload,data:postData,responseType: blob}).then(res {const _res res.datalet blob new Blob([_res], {type: application/png});let downloadElement document.createElement(a);let href window.URL.createObjectURL(blob); //创建下载的链接downloadElement.href href;downloadElement.download res.headers[fileName]; //下载后文件名document.body.appendChild(downloadElement);downloadElement.click(); //点击下载document.body.removeChild(downloadElement); //下载完成移除元素window.URL.revokeObjectURL(href); //释放掉blob对象})}2.3 中文乱码问题 前后端模式下的文件下载进程会出现中文乱码问题我们需要进行修改并且指定一些格式 后端 func Download(c *gin.Context) {filename : url.QueryEscape(国家机密.txt)// 可唤起浏览器下载c.Header(Content-Disposition, attachment; filename*utf-8filename) //c.Header(fileName, filename)c.File(uploads/国家机密.txt) }前端 async download() {let res await axios.get(/download, {headers: {responseType: blob}})if (res.status 200) {let binaryData [];binaryData.push(res.data);let url window.URL.createObjectURL(new Blob(binaryData)); //表示一个指定的file对象或Blob对象let a document.createElement(a);document.body.appendChild(a);// 转码文件的标题let filename decodeURI(res.headers.filename)// 调起文件下载a.href url;a.download filename; //命名下载名称a.click(); //点击触发下载window.URL.revokeObjectURL(url);} }这就是简单的文件上传和下载啦~~
http://www.pierceye.com/news/443525/

相关文章:

  • 设计好的网站百度网站建设费用多少知乎
  • 廊坊网站制作wordpress 文章id排序
  • 湖南中小企业建站价格绍兴seo推广公司
  • 襄樊门户网站建设营销策略怎么写范文
  • 北京网站关键词优化软文广告案例500字
  • 灌云网站建设维护手机网站建站步骤论文
  • 各大网站平台发布信息山亭网站建设
  • 做网站.服务器怎么买公司网站如何上传视频
  • 广州建设工程造价信息网长春百度网站优化
  • 郑州外贸网站建设公司价格wordpress禁止百度抓取
  • 临沂建站程序衡阳网站建设ss0734
  • 开发软件下载网站备案号放网站下面居中
  • 开封网站网站建设有哪些好的模板网站
  • 专业做蛋糕视频网站网站目录怎么做301跳转
  • 白城网站建设网络营销顾问培训
  • 沈阳网站开发培训多少钱百度收录批量提交入口
  • php做的网站怎么入侵wordpress插件安装教程
  • 网站 免费 认证58同城东莞招聘
  • 大兴网站建设服务公司石家庄建站
  • 怎么给公司做个网站wordpress h1标签
  • 电子商务网站设计的原则wordpress 图片 不显示缩略图
  • 网站设计制作开发更改网站名称
  • 兰州构建公司优化网站佛山厂商
  • 外贸网站建设需要多少钱it行业软件开发
  • 手机网站开发哪个好兰州哪家网站做推广效果好
  • 南宁定制建站学生做义工网站
  • 开阳县城乡建设局网站sae 部署wordpress
  • 360免费建站怎么样修改网站图标
  • 心理咨询网站模板国税网站页面建设中
  • 网站查询工信部深圳保障性住房统一网