文件上传
package com.oracle.upload;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.oracle.domain.ResponseUpload;
import com.oracle.domain.UploadBean;
import com.oracle.domain.UserInfo;
import com.oracle.service.UploadService;
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.apache.commons.io.FileUtils;
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.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
/**
* @Description TODO
* @ClassName UploadServlet
* @Author YHY
* @Date 2019/11/11 11:31
* @Version V1.0
*/
@WebServlet(value = "/UploadServlet")
public class UploadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/* 处理响应乱码问题:字节流需getBytes("UTF-8") */
/*response.setContentType("text/html;charset=UTF-8");*/
/* 处理post请求乱码问题 */
request.setCharacterEncoding("UTF-8");
String fileName = ""; //文件名*/
String href = "";/*服务器存储路径*/
String loaclhost_file_name = "";
UserInfo userInfo = (UserInfo) request.getSession().getAttribute("userinfo");
String upload_those = userInfo.getUid();
String access_url = "";/*用户访问的相对路径*/
/*用于返回数据*/
Map map = new HashMap();
boolean flag = ServletFileUpload.isMultipartContent(request);
if (!flag) {
request.setAttribute("msg", "表单的enctype属性不正确");
request.getRequestDispatcher("jsp/upload.jsp").forward(request, response);
return;
}
/*缓冲字节输出流*/
BufferedOutputStream bos = null;
/*缓冲字节输入流*/
BufferedInputStream bis = null;
/*1、创建磁盘文件工程*/
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
/*设置文件上传过程中缓冲区的大小*/
diskFileItemFactory.setSizeThreshold(3);
/*设置文件上传过程中超出缓冲区所产生的临时文件路径*/
diskFileItemFactory.setRepository(new File("D://temporary"));
/*2、创建一个核心解析类*/
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
/*解决中文乱码问题*/
servletFileUpload.setHeaderEncoding("UTF-8");
/*3、利用核心类解析request,解析后得到多个部分。返回list集合。list集合中装的值每个部分内容(FileItem文件项)。*/
try {
List<FileItem> fileItems = servletFileUpload.parseRequest(request);
/*4、遍历list集合,会得到代表每个部分的文件上传项的对象。根据文件项判断是否是文件上传项。*/
for (FileItem f : fileItems) {
/*判断这个文件项是普通项还是文件上传项*/
if (f.isFormField()) {
/*普通项:*/
/*接收普通项的值,不能用request.getParameter()*/
/*获取普通项的key*/
String name = f.getFieldName();
/*接收普通项的值*/
String string = f.getString();
System.out.println(name + ":" + string);
if (name.equals("href")) {
href = string;
}
if (name.equals("access_url")) {
access_url = string;
}
}
}
/*文件上传项*/
for (FileItem file : fileItems) {
if (!file.isFormField()) {
/*文件上传项*/
/*获取文件名*/
loaclhost_file_name = file.getName();
fileName = loaclhost_file_name;
int index = 0;
if ((index = fileName.lastIndexOf("\\")) != -1) {
loaclhost_file_name = loaclhost_file_name.substring(index + 1);
}
loaclhost_file_name = UploadServlet.randomFileNanm(loaclhost_file_name);
/*往request域中存储文件名*/
request.setAttribute("randomFileName", loaclhost_file_name.getBytes());
/*获取数据源*/
bis = new BufferedInputStream(file.getInputStream());
/*服务器存储路径*/
href = href + loaclhost_file_name;
/*用户访问的相对路径*/
access_url = access_url + loaclhost_file_name;
/*明确数据源*/
bos = new BufferedOutputStream(new FileOutputStream(href));
byte[] bytes = new byte[1024];
int line = 0;
while ((line = bis.read(bytes)) != -1) {
bos.write(bytes, 0, line);
}
if (bos != null && bis != null) {
/*释放资源*/
bos.close();
bis.close();
}
/*5、删除临时文件*/
file.delete();
FileUtils.copyFile(new File("D:\\Java\\apache-tomcat-9.0.27\\webapps\\YHY\\images\\xishi\\" + loaclhost_file_name),
new File("D:\\YHY\\web\\images\\xishi\\" + loaclhost_file_name));
/*调用sevice方法*/
/*封装参数*/
UploadBean uploadBean = new UploadBean();
uploadBean.setName(fileName);
uploadBean.setLoaclhost_file_name(loaclhost_file_name);
uploadBean.setUpload_those(upload_those);
uploadBean.setAccess_url(access_url);
uploadBean.setHref(href);
new UploadService().insertUpload(uploadBean);
map.put("code", "0");
map.put("msg", "成功");
map.put("url", "url");
}
}
} catch (FileUploadException e) {
map.put("code", "500");
map.put("msg", "失败");
map.put("url", "url");
e.printStackTrace();
} finally {
if (bos != null && bis != null) {
/*释放资源*/
bos.close();
bis.close();
}
}
response.getWriter().write(new Gson().toJson(map));
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private static String randomFileNanm(String name) {
return UUID.randomUUID().toString().replace("-", "") + name;
}
} 相关推荐
hanwentan 2020-07-21
Lzs 2020-10-23
聚合室 2020-11-16
零 2020-09-18
Justhavefun 2020-10-22
ChaITSimpleLove 2020-10-06
周游列国之仕子 2020-09-15
afanti 2020-09-16
88234852 2020-09-15
YClimb 2020-09-15
风雨断肠人 2020-09-04
卖口粥湛蓝的天空 2020-09-15
stulen 2020-09-15
pythonxuexi 2020-09-06
abfdada 2020-08-26