文件下载的概述:
代码示例:(下载文件)
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String zm="zm.jpg";
String mimeType = getServletContext().getMimeType("/a/" + zm); //获取文件的数据类型
resp.setContentType(mimeType);//通知浏览器 将要要处理的数据类型
resp.setHeader("Content-Disposition","attament;filename="zm.jsp"");//设置响应头通知浏览器这个请求是用于下载的
InputStream resourceAsStream = getServletContext().getResourceAsStream("/a/" + zm);//读取文件内容,并返回字节输入流
ServletOutputStream outputStream = resp.getOutputStream();//获取字节输出流
byte[] bytes = new byte[1024];
int read = resourceAsStream.read(bytes);
while(read!=-1){
outputStream.write(bytes,0,read);
read=resourceAsStream.read(bytes);
}
resourceAsStream.close();
outputStream.close();
}
在使用下载功能的时候可以更简单的方法:依赖与
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
文件上传:
实现文件上传的两个便捷jar包:
commons-fileupload-1.2.1.jar
commons-io-1.4.jar
这两个jar包提供的常用方法:
示例代码:
关于下载文件;文件名是中文出现的中文乱码的解决“
谷歌、IE 类浏览器:
修改Content-Disposition响应头为:
resp.setHeader("Content-Disposition","attament;filename="+ URLEncoder.encode("中国.jpg","UTF-8"));//设置响应头通知浏览器这个请求是用于下载的
火狐类浏览器:
- =?表示编码内容的开始
- Charset 表示字符集
- B 表示BASE64编码
- Xxxxxx 表示文件名BASE64编码后的内容
- ?= 表示编码内容的结束
设置后的代码:
针对于附件的中文乱码的问题:
火狐和谷歌并不能进行统一起来,所以要在回传附件的时候要进行判断浏览器的类型。
从而进行浏览器的选择