Z_Flank
堕落街的米粉
2017-11-23 13:58

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

  • 文件上传下载
  • java
  • ssm

下载文件的代码如下:
项目在本地调试的时候,是可以正常下载本地磁盘的文件的,然后我部署到一台远程机器上,所要下载的文件能够得到他的路径,但是也不报错就是页面没有下载到文件,这是为什么?
备注: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条回答