下载的事件
<a href="javascript:void(0)" onclick="downFile(this)" th:value="${item.getTranLicFileId()}"><i class="fa fa-download ui-datepicker-trigger" style="top: 10px;"></i></a>
/** 附件下载*/
function downFile(e){
var id = $(e).attr("value");
$.pikaQajax({
url: "/company-check/down-file",
data: {"id": id},
type: "post",
dataType: "json",
success: function (data) {
if (data.status === 200) {
// window.open(data.msg);
var filePath = data.msg;
if(filePath.indexOf("D:\\temp_file\\") >= 0 ) {
filePath = filePath.substring(13,filePath.length)
}
window.open(filePath);
}
}
})
}
/**
* 下载
*/
@RequestMapping("/down-file")
@ResponseBody
public ApiResponses<Void> getDownUrl(String id, HttpServletResponse res){
UploadFileDTO uploadFileDTO = uploadFileRpcService.getFileById(id);
String netPath = storageUrl + uploadFileDTO.getFilePath();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
File file = null;
try {
URL url = new URL(netPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream is = connection.getInputStream();
bis = new BufferedInputStream(is);
file = new File("D:/temp_file");
if(!file.exists()){//如果文件夹不存在
file.mkdir();//创建文件夹
}
file = new File("D:/temp_file/" + netPath.substring((netPath.lastIndexOf("/"))));//名字截取 可以省略
FileOutputStream fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
int b = 0;
byte[] byArr = new byte[1024*4];
while((b=bis.read(byArr))!=-1){
bos.write(byArr, 0, b);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(bis!=null){
bis.close();
}
if(bos!=null){
bos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return success( file.getPath());
}
前端要显示的是外网文件,但不想在前端页面中显示出外域的地址。
按照上面的方法,将本地文件路径转成项目虚拟路径来访问,需要添加一个访问静态资源的配置,如下
registry.addResourceHandler("/company-check/**").addResourceLocations("file:D:/temp_file/");