堕落街的米粉
2017-11-23 13:58
采纳率: 12.5%
浏览 7.0k

javaWeb项目本地的文件下载没问题,部署到服务器上就无法文件下载

下载文件的代码如下:
项目在本地调试的时候,是可以正常下载本地磁盘的文件的,然后我部署到一台远程机器上,所要下载的文件能够得到他的路径,但是也不报错就是页面没有下载到文件,这是为什么?
备注:1.我在浏览器去访问那个文件的路径,404访问不到,虽然在WEB-INF下面放着。
访问路径:http://10.10.3.149:8080/alitm/WEB-INF/upload/d9209cf6856e427495dd78e4cf3d24d3_result.csv

[b]package com.ecsemir.utils;

import com.ecsemir.entity.ExceptUpload;
import org.springframework.context.annotation.Scope;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

/**

  • Created by zhuxiaofan01 on 2017/11/7.
  • 文件上传
    */
    @Scope("prototype")
    public class DownloadFile {

    public static void getDownloadFile(HttpServletRequest request, HttpServletResponse response,ExceptUpload exceptUpload)
    throws IOException, ServletException {
    //得到要下载的文件路径
    String fpath = exceptUpload.getPath_resultCsv();
    String filepath = request.getSession().getServletContext().getRealPath(fpath);
    //获取时间
    String res;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    String time=simpleDateFormat.format(new Date());
    //得到文件名
    int index1=filepath.lastIndexOf("_");
    int index2=filepath.lastIndexOf(".");
    String fileName=time+filepath.substring(index1+1,index2)+".csv";
    System.out.println("---------------------------fileName:"+fileName+"-----------------"+filepath);
    fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
    //得到要下载的文件
    File file = new File(filepath);
    //如果文件不存在
    if (!file.exists()) {
    request.setAttribute("message", "您要下载的资源已被删除!!");
    request.getRequestDispatcher("/except/downloadlist.jsp").forward(request, response);
    return;
    }
    //设置响应头,控制浏览器下载该文件
    response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
    //读取要下载的文件,保存到文件输入流
    FileInputStream in = new FileInputStream(file);
    //创建输出流
    OutputStream out = response.getOutputStream();
    //创建缓冲区
    byte buffer[] = new byte[1024];
    int len = 0;
    //循环将输入流中的内容读取到缓冲区当中
    while ((len = in.read(buffer)) > 0) {
    //输出缓冲区的内容到浏览器,实现文件下载
    out.write(buffer, 0, len);
    }
    //关闭文件输入流
    in.close();
    //关闭输出流
    out.close();

    }
    }[/b]

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • 王庆禹 2017-11-23 14:15

    服务器是不是没配置文件夹的权限

    评论
    解决 无用
    打赏 举报
  • Q544471255 2017-11-23 16:36

    路径是正确的?

    服务器的系统和你本地的一样吗?

    评论
    解决 无用
    打赏 举报
  • windy2017 2017-11-25 10:04

    WEB-INF路径下面的文件无法通过地址栏等方式访问,所以一般项目中css js images等文件会放在外面 所以统一加载

    评论
    解决 无用
    打赏 举报
  • 雲浩 2018-01-19 15:03

    WEB-INF下的不可以通过URL访问

    评论
    解决 无用
    打赏 举报
  • weixin_43419846 2021-01-22 16:04

    解决了吗,我也遇到了

    评论
    解决 无用
    打赏 举报
  • swag_gemmar 2021-01-27 16:33

    解决了吗,我也遇到了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题