update OSS下载文件名改为后端传输

This commit is contained in:
疯狂的狮子li 2021-07-23 10:48:28 +08:00
parent 1f2cf719da
commit bb67924233
5 changed files with 20 additions and 6 deletions

View File

@ -6,6 +6,8 @@ import lombok.experimental.Accessors;
/** /**
* 上传返回体 * 上传返回体
*
* @author Lion Li
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor

View File

@ -10,6 +10,7 @@ import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.exception.CustomException; import com.ruoyi.common.exception.CustomException;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.system.bo.SysOssQueryBo; import com.ruoyi.system.bo.SysOssQueryBo;
import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.domain.SysOss;
import com.ruoyi.system.service.ISysOssService; import com.ruoyi.system.service.ISysOssService;
@ -29,6 +30,8 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotEmpty;
import java.io.IOException; import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -88,6 +91,9 @@ public class SysOssController extends BaseController {
throw new CustomException("文件数据不存在!"); throw new CustomException("文件数据不存在!");
} }
response.reset(); response.reset();
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
FileUtils.setAttachmentResponseHeader(response, URLEncoder.encode(sysOss.getOriginalName(), StandardCharsets.UTF_8));
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8"); response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE + "; charset=UTF-8");
long data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false); long data = HttpUtil.download(sysOss.getUrl(), response.getOutputStream(), false);
response.setContentLength(Convert.toInt(data)); response.setContentLength(Convert.toInt(data));

View File

@ -6,7 +6,7 @@ const mimeMap = {
} }
const baseUrl = process.env.VUE_APP_BASE_API const baseUrl = process.env.VUE_APP_BASE_API
export function downLoadOss(ossId, filename) { export function downLoadOss(ossId) {
var url = baseUrl + '/system/oss/download/' + ossId var url = baseUrl + '/system/oss/download/' + ossId
axios({ axios({
method: 'get', method: 'get',
@ -14,7 +14,7 @@ export function downLoadOss(ossId, filename) {
responseType: 'blob', responseType: 'blob',
headers: { 'Authorization': 'Bearer ' + getToken() } headers: { 'Authorization': 'Bearer ' + getToken() }
}).then(res => { }).then(res => {
resolveBlob(res, mimeMap.oss, filename) resolveBlob(res, mimeMap.oss)
}) })
} }
/** /**
@ -22,11 +22,17 @@ export function downLoadOss(ossId, filename) {
* @param {*} res blob响应内容 * @param {*} res blob响应内容
* @param {String} mimeType MIME类型 * @param {String} mimeType MIME类型
*/ */
export function resolveBlob(res, mimeType, filename) { export function resolveBlob(res, mimeType) {
const aLink = document.createElement('a') const aLink = document.createElement('a')
var blob = new Blob([res.data], { type: mimeType }) var blob = new Blob([res.data], { type: mimeType })
// 从response的headers中获取filename, 后端response.setHeader("Content-disposition", "attachment; filename=xxxx.docx") 设置的文件名;
var patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
var contentDisposition = decodeURI(res.headers['content-disposition'])
var result = patt.exec(contentDisposition)
var fileName = result[1]
fileName = fileName.replace(/\"/g, '')
aLink.href = URL.createObjectURL(blob) aLink.href = URL.createObjectURL(blob)
aLink.setAttribute('download', filename) // 设置下载文件名称 aLink.setAttribute('download', decodeURI(fileName)) // 设置下载文件名称
document.body.appendChild(aLink) document.body.appendChild(aLink)
aLink.click() aLink.click()
document.body.removeChild(aLink); document.body.removeChild(aLink);

View File

@ -289,7 +289,7 @@ export default {
}, },
/** 下载按钮操作 */ /** 下载按钮操作 */
handleDownload(row) { handleDownload(row) {
downLoadOss(row.ossId, row.originalName) downLoadOss(row.ossId)
}, },
/** 删除按钮操作 */ /** 删除按钮操作 */
handleDelete(row) { handleDelete(row) {