直接通过服务器文件相对路径实现文件下载

时间:2024-04-12 08:05:42

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配置文件中添加如下配置可实现直接访问

直接通过服务器文件相对路径实现文件下载