golang 文件上传下载篇

打包下载 神奇的三方

		 if err := archiver.Archive(pathStr, "./compress/"+des); err != nil {
								println(err)
							}

一句话搞定 github.com/mholt/archiver/v3

content-type设置 下载或者预览

决定浏览器将以什么形式、什么编码读取这个文件

  • 一般是application/json: JSON数据格式

  • 下载的是application/octet-stream : 二进制流数据(如常见的文件下载)

  • 图片预览 image/jpeg :jpg图片格式

  • Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接在浏览器上显示或者在访问时弹出文件下载对话框。

  • content-type 指示响应内容的格式

  • content-disposition 指示如何处理响应内容。

  • 在这里插入图片描述

  • 在这里插入图片描述按文件名后缀截取,判断是预览流还是下载流
    在这里插入图片描述 -

动态文件的上传
只能说太优美了 差人好多啊…路漫漫…

				func PostFile(toUrl base.UrlStr, b []byte, fileName string, head map[string]string, retry int) (*http.Response, string, []error) {
						request := gorequest.New().Post(string(toUrl)).Type("multipart").SendFile(b, fileName, "file") 
						//使用gorequest发送文件,multipart标签已固定好文件头
						for k, v := range head {
							request.Set(k, v)
						}
						if retry > 1 {
							setRetry(request, retry, 3)
						}
						logger.L.WithFields(logrus.Fields{
							"url":request.Url,
							"header":request.Header,
						}).Info("http POST info")
						return request.End()
					}

接受接受客户端传来的file ,转换成FileHeader格式
在这里插入图片描述fileHeader用open方法打开文件,用io流将文件转换成byte字节,最终文件以字节形式发送

gin.Status 访问静态文件

在这里插入图片描述

  • 静态文件服务只能访问项目本地的文件,路径和文件地址如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    然后客户端请求的路径是 ,请求这个文件之后可直接下载.

     	https://court-dev.minbofin.com/ic/court/api/v1/file/batchdownload/%E8%AF%89%E8%AE%BC%E6%A1%88%E4%BB%B6_20200213030546.xlsx
    
发布了39 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42123182/article/details/104280268