package com.it.servlet;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.json.JSONException;
import org.json.JSONObject;
import com.it.listener.FileUploadListener;
import com.it.util.SnowFlakeUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
public class ProgressUploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
JSONObject json=new JSONObject();
//判断用户请求是否为multipart类型
if(ServletFileUpload.isMultipartContent(request)){
//创建磁盘工厂,设置内存大小和临时存储位置
DiskFileItemFactory factory=new DiskFileItemFactory();
//如果文件大小大于内存大小则存储在临时存储空间
//临时文件使用之后会自动删除
//如果不设置,默认的临时存储空间是:C:\Users\Administrator\AppData\Local\Temp
File tempDirFile= new File("D:\\tempDir");
if(!tempDirFile.exists()){
tempDirFile.mkdir();//如果目录不存在就创建
}
factory.setRepository(tempDirFile);
//创建ServletFileUpload设置单个文件上传大小以及整个request域大小
ServletFileUpload upload=new ServletFileUpload(factory);
//创建ProgressListener对象监听文件上传进度
upload.setProgressListener(new FileUploadListener(request));
//解析request域,list中存放了表单数据+文件
try {
List<FileItem> list=upload.parseRequest(request);
for (FileItem item:list){
if(item.isFormField()){
//如果是表单数据
if(item.getFieldName().equals("user_id")){
String user_id=item.getString("utf-8");
}
}else {
//如果是上传的文件
//解析出文件后缀名
String fileSuffxName=item.getName().substring(item.getName().lastIndexOf("."));
//用雪花算法生成一个名称+文件后缀形成一个新的名字
//最终将文件存储在D:\\upload\\目录中
File file=new File("D:\\upload\\"+ SnowFlakeUtils.nextId()+fileSuffxName);
item.write(file);
json.put("data","success");
}
}
} catch (FileUploadException e) {
try {
json.put("data","error");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
try {
json.put("data","error");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
//返回json字符串,告知前端上传时成功还是失败
response.getWriter().print(json.toString());
}
}

雾林小妖
- 粉丝: 1w+
最新资源
- 各种图纸制作需要的软件------(1).pdf
- GIS组合电器日常巡视项目(1).ppt
- C语言数组教程-PPT(1).ppt
- 通信光缆施工作业指导书 (1)(1).doc
- 英语练习题软件6年级.doc(1).pdf
- 中学校园网站建设方案书(1).pdf
- 各种互联网模式概念(1).docx
- 软件bug管理流程和规范(1).doc
- 软件技术服务方案投标流程(1).docx
- 智能巡检管理系统V3.5.7软件说明书(1).pdf
- 施工管理施工协调及接口管理措施(1).doc
- 7.制作第三方-发布.mp4
- “大数据”解决方案(1).pptx
- JavaEE人力资源管理系统设计与实现(1).doc
- 计算机系统概述PPT课件(1).ppt
- 大学生课程表Excel表格------(1).pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


