打包下载 神奇的三方
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