当我们想要下载某一个文件时,可以直接访问该文件的所在路径,通常情况下浏览器不能识别文件,即会出现下载。但是当文件时图片等可被识别的文件时就会出现下载的情况。
因此写一个后台防止此种情况的发生:(以文件的地址为参数访问该类即可)
package com.eduweb.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownFilesUtil extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
//获得请求文件名
String filename = req.getParameter("filename");
System.out.println(filename);
File f = new File(filename);
//设置文件MIME类型
resp.setContentType(getServletContext().getMimeType(f.getName()));
//设置Content-Disposition
resp.setHeader("Content-Disposition", "attachment;filename="+f.getName());
//读取目标文件,通过response将目标文件写到客户端
//获取目标文件的绝对路径
String fullFileName =System.getProperty("catalina.home")+"/webapps/SoftWareEDU/upload"+"/"+ filename;
//System.out.println(fullFileName);
//读取文件
InputStream in = new FileInputStream(fullFileName);
OutputStream out = resp.getOutputStream();
//写文件
int b;
while((b=in.read())!= -1)
{
out.write(b);
}
in.close();
out.close();
}
}