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

上海企业网站备案上海建设工程信息网站

上海企业网站备案,上海建设工程信息网站,办公室装修设计效果图免费,最新新闻热点事件300字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://wiki.neutronadmin.com/news/45761/

相关文章:

  • 深圳做三网合一网站互联网公司薪酬体系
  • 重庆企业网站开发服务营销手机网站版面
  • 网站建设的要点山东青岛68元建网站
  • 网站外链如何做分类列表页wordpress
  • 上海好的高端网站建设服务公司济南企业自助建站
  • 建设网站要注意事项酷家乐装修设计软件app下载
  • 如何让本机做网站让内网访问产品介绍网站设计
  • 网站备案 邮寄资料新版新白娘子传奇小青最后和谁在一起了
  • wordpress可以做企业网站网站后台程序怎么做
  • 沈阳制作网站企业资深的食品行业网站开发
  • 重庆网站公司推荐360易托管建站工具
  • 德州做网站公司电话投资项目
  • 陕西专业网站建设价格汕头制作网站
  • 建设银行曲江支行网站公司建了网站怎么做分录
  • 商学院网站建设建议wordpress固定连接怎么设置好
  • 深圳平湖做网站html编写新闻页面
  • asp.net网站开发四酷全书金融软件开发公司排名
  • 做网站和做系统的区别seo快速排名
  • 公司网站建设的目标是什么wordpress书插件
  • 网站建设的意义是什么手机关键词seo排名优化
  • 网站的后端怎么开发网站会员体系
  • 国外做网站卖东西要什么条件怎么申请信用卡收款网站接口
  • 深圳阿里网站设计公司大连个人网站开发制作
  • 电子商务网站的特点尚德建设集团网站
  • 建设一个朋友的网站百姓畅言六安杂谈
  • 怎么获取网站数据做统计数据wordpress 调用所有
  • 修水县城乡建设局网站昆山企业网站设计
  • wordpress修改网站icon做网站jsp好还是
  • 宜昌市建设厅官方网站龙之向导外贸经理人网站
  • 做外贸最适合的网站系统深圳市建设工程