1,需求分析
文件上传到服务器,查询时展示上传文件信息,实现点击文件名称实现文件下载
2,实现方式
2.1) 通过java代码下载方法
/**
* 附件下载
* @param response
* @param fileName
* @param path
* @return
* @throws Exception
*/
@Override
public void downloadFile(HttpServletResponse response, String path, String fileName) throws Exception {
if (fileName != null) {
//设置文件路径
File file = new File(path);
if (file.exists()) {
response.setHeader("content-type", "application/octet-stream");
response.setContentType("application/octet-stream");
try {
response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
2.2) 以上方式存在一个问题,如果服务部署在多个服务器,上传时可能上传到A服务器,用户操作可能访问的是B服务器,就会下载不到数据。
解决方案
通过挂载的方式实现每个服务器上文件同步
且可以通过相对地址实现文件下载,ip为前端服务器地址
http://10.108.2.203/upload/datong_97/20190522132354_%E6%96%B9%E6%A1%88.doc
upload/datong_97/文件名
1>文件存放路径
2>上面访问路径并没有带 data/nfs/upload,如何实现下载的,通过在nginx配置文件中添加如下配置可实现直接访问