文件上传下载

文件上传必要前提(有如下三点)

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 ");
out.write("洗衣机,10 ");
out.write("冰箱,8 ");
}


***需要导入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();


原文地址:https://www.cnblogs.com/fdbk/p/8569772.html