get方法请求,在新标签页下载,避免图片或PDF文件在当前页面直接打开。保持原文件名,重复文件按“文件名(1)”、“文件名(2)”命名。
java下载接口
/**
* 通用下载请求
*
* @param fileName 文件名称
* @param delete 是否删除
*/
@GetMapping("/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{
try
{
if (!FileUtils.checkAllowDownload(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
// String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String realFileName = fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete)
{
FileUtils.deleteFile(filePath);
}
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
js工具类
// 通用下载方法
export function download_ex(fileName) {
// window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
var elemIF = document.createElement("iframe");
elemIF.src = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;
elemIF.style.display = "none";
document.body.appendChild(elemIF);
}
挂载工具到全局(main.js)
import { download_ex } from "@/utils/ruoyi";
Vue.prototype.download_ex = download_ex
js调用
/** 导出PDF */
handlePDF(row) {
const drId = row.drId || this.ids
exportPDF(drId).then(response => {
if(response.msg == null)
{
this.msgError("没有文号,不允许导出");
}
else
{
this.download_ex(response.msg);
this.msgSuccess("导出PDF文件成功");
}
});
},