上传文件插件浅析
2019-02-28 本文已影响0人
nzdnllm
在当前业务线上传文件方法 loadFileDropFunction() --前端JS
function loadFileDropFunc(tag) {
var dropbox = $('#dropbox');
dropbox.filedrop({
paramname:'pic',
maxfiles: 5, // 同时上传文件最多5个
maxfilesize: 2, //文件大小支持2M以内
url: 'uploadMonitorCases?folderName=' + tag, //指向uploadMonitorCases,参数名folderName,参数值tag(在本项目中传入的是业务线名称),将url和javaserverlet的对应关系配置在web.xml中
uploadStarted:function(i, file, len) {
document.getElementById("uploadcase_loading_layout").style.display = "block";
}, //页面元素uploadcase_loading_layout为加载中的图片,上传时显示加载中图片
progressUpdated: function(i, file, progress) {
document.getElementById("uploadcase_loading_layout").style.display = "block";
}, //上传中,显示加载中图片
uploadFinished:function(i,file,response) {
document.getElementById("uploadcase_loading_layout").style.display = "none";
getFilesInFolder();
},//上传完成后,隐藏加载中图片,获取文件夹
//以下为上传文件的错误提示
error: function(err, file) {
switch(err) {
case 'BrowserNotSupported':
alert('Your browser does not support HTML5 file uploads!');
break;
case 'TooManyFiles':
alert('Too many files! Please select 5 at most! (configurable)');
break;
case 'FileTooLarge':
alert(file.name+' is too large! Please upload files up to 2mb (configurable).');
break;
case 'FileTypeNotAllowed':
alert('File type not allowed!');
break;
case 'FileExtensionNotAllowed':
alert('File extension not allowed!!');
break;
default:
break;
}
}
});
};
web.xml配置
<servlet>
<servlet-name>UploadMonitorCases</servlet-name>
<servlet-class>com.xxx.servlet.UploadMonitorFilesServlet</servlet-class>
<init-param>
<param-name>monitorCaseRootPath</param-name>
<param-value>此处配置上传文件最终存储路径</param-value>
</init-param>
<init-param>
<param-name>temppath</param-name>
<param-value>此处配置上传文件临时存储路径</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>UploadMonitorCases</servlet-name>
<url-pattern>/uploadMonitorCases</url-pattern>
</servlet-mapping>
配置完成这样我们的uploadMonitorCases即使用UploadMonitorFilesServlet这个class
package com.xxx.servlet;
import java.io.*;
import java.util.Iterator;
import java.util.List;
import javax.servlet.http.*;
import javax.servlet.*;
import net.sf.json.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadMonitorFilesServlet extends HttpServlet {
private String filePath; // 文件存放目录
private String tempPath; // 临时文件目录
private String folderName;
public void init(ServletConfig config) throws ServletException {
super.init(config);
filePath = config.getInitParameter("monitorCaseRootPath");
tempPath = config.getInitParameter("temppath");
System.out.println("case文件存放目录、临时文件目录准备完毕 ...");
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
doPost(req, res);
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws IOException, ServletException {
//设置传输编码
res.setContentType("text/html;charset=UTF-8");
//传值编码
req.setCharacterEncoding("UTF-8");
PrintWriter out = res.getWriter();
// Folder名称
folderName = req.getParameter("folderName");
if (folderName == null || folderName.isEmpty()) {
System.out.println("需要访问的目的文件夹为空,请重新操作!");
out.write("需要访问的目的文件夹为空,请重新操作!");
return;
}
try {
DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024);
// repository 贮藏室,即临时文件目录
diskFactory.setRepository(new File(tempPath));
ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小 4M
upload.setSizeMax(4 * 1024 * 1024);
// 解析HTTP请求消息头
List fileItems = upload.parseRequest(req);
Iterator iter = fileItems.iterator();
String fileName = "";
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
System.out.println("处理表单内容 ...");
fileName = processFormField(item, out);
} else {
System.out.println("处理上传的文件 ... " + item.getName());
String savedfilePath = processUploadFile(item);
out.write("处理完成!" + savedfilePath);
}
}
out.flush();
out.close();
} catch (Exception e) {
System.out.println("使用 fileupload 包时发生异常 ...");
e.printStackTrace();
}
}
// 处理表单内容
private String processFormField(FileItem item, PrintWriter pw)
throws Exception {
String name = item.getFieldName();
String value = item.getString();
pw.println(name + " : " + value + "\r\n");
return name.equals("filePath")?value:"";
}
// 处理上传的文件
private String processUploadFile(FileItem item) throws Exception {
// 此时的文件名包含了完整的路径,得注意加工一下
String filename = item.getName();
int index = filename.lastIndexOf("\\");
filename = filename.substring(index + 1, filename.length());
long fileSize = item.getSize();
if ("".equals(filename) && fileSize == 0) {
System.out.println("文件名为空 ...");
return null;
}
File uploadFile = new File(filePath + folderName + "/" + filename);
item.write(uploadFile);
return uploadFile.getAbsolutePath();
}
}