文件上传下载
文件上传必要前提(有如下三点)
a: 表单的form标签 method 必须是post
b:enctype 必须是multipart/form-data
c :必须有input标签而且 type="file"
注意点:
***mime类型其实就是文件类型
***enctype其实就是请求消息头里面的Content-type
***由于表单中提交数据的方式为multipa..所以getparameter不好使了
导入两个jar包
1 >>commons-io-2.2.jar
2>>commons-fileupload-1.2.2.jar
其中fileupload jar包中包括三个关键的类
工厂类 diskFileItemFactry
生产 ServletFileupload
操作 FileItem
***解决file文件全路径的方法资料里找FAQ
(fileUtils.getName)
****避免文件名一致问题
filename=UUID.random()+_+原filename
****目录打散
按照日期打散
****限制上传文件大小
核心类.setFileSize...(字节为单位);
临时文件处理
delete
解决上传表单乱码问题
ServletFileupload.setHeaderEncoding("UTF-8")
文件下载
要素:两个头一个流
//设置一个要下载的文件
String filename = "销售榜单.csv";
//设置文件名的编码
if(request.getHeader("user-agent").toLowerCase().contains("msie")){
filename = URLEncoder.encode(filename, "UTF-8");//将不安全的文件名改为UTF-8格式
}else{
filename = new String(filename.getBytes("UTF-8"),"iso-8859-1");//火狐浏览器
}
//告知浏览器要下载文件
response.setHeader("content-disposition", "attachment;filename="+filename);
//response.setHeader("content-type", "image/jpeg");
response.setContentType(this.getServletContext().getMimeType(filename));//根据文件名自动获得文件类型
response.setCharacterEncoding("UTF-8");//告知服务器使用什么编码
//创建一个文件输出流
PrintWriter out = response.getWriter();
out.write("电视机,20\n");
out.write("洗衣机,10\n");
out.write("冰箱,8\n");
}
***需要导入io包
***将服务器上指定的文件下载
String filename = "F:\\图片\\6.jpg";
//根据文件名获取 MIME 类型
String contentType = this.getServletContext().getMimeType(filename);
String contentDisposition = "attachment;filename=a.jpg";
// 输入流
FileInputStream input = new FileInputStream(filename);
// 设置头
response.setHeader("Content-Type",contentType);
response.setHeader("Content-Disposition",contentDisposition);
// 获取绑定了客户端的流
ServletOutputStream output = response.getOutputStream();
// 把输入流中的数据写入到输出流中
IOUtils.copy(input,output);
input.close();