java异步上传_Servlet异步上传文件

packagecom.eviac.blog.restws;importjava.io.File;importjava.io.IOException;importjava.io.PrintWriter;importjava.util.List;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importorg.apache.commons.fileupload.FileItem;importorg.apache.commons.fileupload.disk.DiskFileItemFactory;importorg.apache.commons.fileupload.servlet.ServletFileUpload;public class FileUpload extendsHttpServlet{private static final long serialVersionUID = 1L;//上传文件存储目录

private static final String UPLOAD_DIRECTORY = "upload";//上传配置

private static final int MEMORY_THRESHOLD = 1024 * 1024 * 3; //3MB

private static final int MAX_FILE_SIZE = 1024 * 1024 * 40; //40MB

private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 50; //50MB

publicFileUpload(){super();

}public void service(HttpServletRequest request,HttpServletResponse response) throwsServletException, IOException{

PrintWriter writer=response.getWriter();//检测是否为多媒体上传

if (!ServletFileUpload.isMultipartContent(request)) {//如果不是则停止

writer.println("Error: 表单必须包含 enctype=multipart/form-data...");

writer.flush();return;

}//记住要写这句话,上传的文件名才不会乱码!!!!!!!!!

request.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");//配置上传参数

DiskFileItemFactory factory = newDiskFileItemFactory();//设置内存临界值 - 超过后将产生临时文件并存储于临时目录中

factory.setSizeThreshold(MEMORY_THRESHOLD);//设置临时存储目录

factory.setRepository(new File(System.getProperty("java.io.tmpdir")));

ServletFileUpload upload= newServletFileUpload(factory);//设置最大文件上传值

upload.setFileSizeMax(MAX_FILE_SIZE);//设置最大请求值 (包含文件和表单数据)

upload.setSizeMax(MAX_REQUEST_SIZE);//构造临时路径来存储上传的文件//这个路径相对当前应用的目录

String uploadPath = request.getContextPath() + File.separator +UPLOAD_DIRECTORY;//获取项目发布路径 下的upload文件夹

uploadPath = request.getSession().getServletContext().getRealPath("/upload");//如果目录不存在则创建

File uploadDir = newFile(uploadPath);if (!uploadDir.exists()) {

uploadDir.mkdir();

}try{//解析请求的内容提取文件数据//@SuppressWarnings("unchecked")

List formItems =upload.parseRequest(request);if (formItems != null && formItems.size() > 0) {//迭代表单数据

for(FileItem item : formItems) {//处理不在表单中的字段

if (!item.isFormField()) {//这里处理文件中文乱码没用。。。。。。。。。

System.out.println(new String(item.getName().getBytes("utf-8"),"iso-8859-1"));

String fileName= newFile(item.getName()).getName();

String filePath= uploadPath + File.separator +fileName;

File storeFile= newFile(filePath);//在控制台输出文件的上传路径

System.out.println(filePath);//保存文件到硬盘

item.write(storeFile);//注意编码,不然返回前端会乱码!!!

writer.println(new String("上传成功!".getBytes("utf-8"),"iso-8859-1"));

}

}

}

}catch(Exception ex) {

ex.printStackTrace();

}//跳转到 message.jsp,这里使用了异步上传,所以不用跳转页面//request.getRequestDispatcher("/message.jsp").forward(request, response);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值