public class FileUploadController extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
int id = Integer.parseInt(req.getParameter("id"));
//使用FileUpload实现数据的上传
//1.创建FileItemFactory创建工厂
FileItemFactory factory = new DiskFileItemFactory();
//2.ServletFileUpload
ServletFileUpload fileUpload = new ServletFileUpload(factory);
//3.设置对request进行解析ServletFileUpload.parseRequest
List<FileItem> fileItems = null;
try {
fileItems = fileUpload.parseRequest(req);
} catch (FileUploadException e) {
e.printStackTrace();
}
UserInfo userInfo = new UserInfo();
//4.获取到所有的表单中的字段FileItem
for (FileItem fileItem:fileItems){
//5.判断是否是一个文件
if (fileItem.isFormField()){
if (fileItem.isFormField()){
//普通的字段
System.out.println(fileItem.getFieldName()+":"+fileItem.getString());
if ("username".equals(fileItem.getFieldName())){
userInfo.setUserName(fileItem.getString());
}
}
}else {
//上传的文件
//6.将文件上传到对应的位置上
//6.1 文件上传的位置设定
String realFile = req.getServletContext().getRealPath("/abcd");
//真是目录的对象
File realDir = new File(realFile);
//创建目录
if (!realDir.exists()){
realDir.mkdirs();
}
//获取到文件的名字
String fileName = fileItem.getName();
//将文件名称分成两个,获取到文件的扩展名
String extName = fileName.substring(fileName.lastIndexOf("."));
//新文件名称创建
String newName = UUID.randomUUID().toString() + extName;
//实现文件的上传
File uploadFile = new File(realFile,newName);
try {
fileItem.write(uploadFile);
} catch (Exception e) {
e.printStackTrace();
}
userInfo.setHeadphone("abcd/"+newName);
}
}
富文本编辑器:可内嵌于浏览器,所见即所得的文本编辑器
富文本编辑器不同于文本编辑器,程序员可到网上下载免费的富文本编辑器内嵌于自己的网站或程序里(当然付费的功能会更强大些),方便用户编辑文章或信息。比较好的文本编辑器kindeditor,fckeditor等。
ServletFileUpload类负责处理上传的文件数据,并将表单中的每个输入项封装成FileItem对象。
在获取ServletFileUpload对象的时候,需要一个DiskFileItemFactory对象(磁盘文件项)
通过表单上传文件,get方法对上传文件的大小有限制,post方法没有限制,所以一般使用post方法。而且使用get方法的话在获取ServletFileUpload时会出错。另外,表单如果包含一个文件上传输入的话,这个表单的enctype属性就必须设置为multipart/form-data。(设置为二进制表单)
步骤:
1.创建FileItemFactory
2.获取ServletFileUpload对象
3.对请求进行解析(流)
4.获取到所有表单字段FileItem
5.判断是否是文件
6.将文件上传到对应位置
7.实现文件传输
方法:
fileItem.getFiledName(); 得到表单传输的name
fileItem.getName(); 只有是上传文件时,获取到文件名称
fileItem.getSize(); 只有是上传文件时,获取到文件大小
fileItem.getString(); 当前FileItem的值
fileItem.getContentType(); 获取文件类型
fileItem.isFormField(); 判断是不是字段,如果是普通字段,该值就是true,否则就是false
添加依赖
<!-- 文件上传组件包 --><!--https://mvnrepository.com/artifact/common s-fileupload/commons-fileupload --><dependency><groupId> commons-fileupload </groupId><artifactId> commons-fileupload </artifactId><version> 1.4 </version></dependency>