java文件下载通过response流实现文件存储在客户端指定路径

1、我们发送请求到服务器端通过response输出流将文件进行读取存储到客户端

一般情况下我们是弹出窗口让用户选择存储路径,如何实现默认存储到指定路径呢?

代码如下:

2、客户端发送请求:

2.1、获取文件名,获取指定文件名的response流

2.2、将response输出流包装到制定了文件下载路径的OutPut流中写到本地的设置路径下outputUrl

rpcServerUrl是服务器端的路径

    @RequestMapping(value = "/receiveFilename", method = { RequestMethod.POST})
    public Boolean receiveFilename(String filename) {
        Boolean flag = false;
        try {
            //创建httpClient对象
            HttpClient httpClient = new HttpClient();
            //创建getMethod对象
            GetMethod getMethod = new GetMethod(rpcServerUrl);
            //封装参数
            getMethod.setRequestHeader("fileName", URLEncoder.encode(filename,"UTF-8"));
            //发送请求
            httpClient.executeMethod(getMethod);
            //创建接收文件的流
            File file = new File(outputUrl++File.separator+filename);
            OutputStream outputStream = new FileOutputStream(file);
            //将responseBody截取并写入到指定文件路径下
            outputStream.write(getMethod.getResponseBody());
            outputStream.flush();
            outputStream.close();
            flag = true;
        } catch (Exception e) {
            e.printStackTrace();
            flag = false;
        }
        return flag;
    }


3、服务器端接收请求代码

读取服务器端文件,将服务器端文件写入到response的输出流中

    @RequestMapping(value = "/sendUploadVoice")
    public void sendUploadVoice(HttpServletResponse response,HttpServletRequest request) {
        try {
                //接收请求
                request.setCharacterEncoding("utf-8");
                response.setCharacterEncoding("utf-8");
                response.setContentType("application/octet-stream");
                //获取文件
                String fileName = request.getHeader("fileName");
                fileName= URLDecoder.decode(fileName,"UTF-8");
                //获取文件输入流  localFileDir是服务端存储文件的路径
                File file = new File(localFileDir+ File.separator + fileName);
                response.setContentLength((int)file.length());
                response.setHeader("Accept-Ranges", "bytes");
                InputStream in = new BufferedInputStream(new FileInputStream(file), 4096);
                OutputStream os = new BufferedOutputStream(response.getOutputStream());

                byte[] bytes = new byte[4096];
                int i = 0;
                while ((i = in.read(bytes)) > 0) {
                    os.write(bytes, 0, i);
                }
                os.flush();
                os.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    

 

 

 

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
实现文件上传到服务器,可以使用Java的Servlet和JSP技术。 首先,在jsp页面中,需要一个表单来上传文件: ```html <form action="upload" method="post" enctype="multipart/form-data"> <input type="file" name="file"/> <input type="submit" value="Upload"/> </form> ``` 其中,`action`属性指定了表单提交的地址为`upload`,`enctype`属性指定了表单数据类型为`multipart/form-data`,即支持文件上传。 然后,在Servlet中,可以接收并处理上传的文件: ```java @WebServlet("/upload") @MultipartConfig public class FileUploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); // 保存文件到服务器 File file = new File("path/to/save/" + fileName); FileOutputStream outputStream = new FileOutputStream(file); byte[] buffer = new byte[1024]; int length; while ((length = fileContent.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } outputStream.close(); fileContent.close(); // 生成文件访问的URL String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath(); String fileUrl = baseUrl + "/files/" + fileName; // 返回文件访问URL response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); writer.write(fileUrl); writer.close(); } } ``` 其中,使用`@MultipartConfig`注解来启用文件上传功能,`request.getPart("file")`方法用于获取上传的文件,`filePart.getSubmittedFileName()`方法用于获取文件名,`filePart.getInputStream()`方法用于获取文件内容。 然后,将文件保存到服务器的指定路径下,并生成文件访问的URL。最后,将文件访问URL返回给客户端。 在生成文件访问URL时,可以使用`request.getScheme()`方法获取请求协议,`request.getServerName()`方法获取服务器名称,`request.getServerPort()`方法获取服务器端口号,`request.getContextPath()`方法获取应用上下文路径,从而拼接出完整的访问URL。 为了保证文件安全性,可以将上传的文件保存在指定文件夹中,并设置相应的权限,同时可以对上传文件进行校验,例如检查文件类型、大小等,避免恶意文件上传和文件过大导致的服务器负载过高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值