
system.web.file.FileUp Maven / Gradle / Ivy
package system.web.file;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServletRequest;
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.FileCleanerCleanup;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileCleaningTracker;
import system.web.WebContext;
/**
*
* @author wangchunzi
*/
final public class FileUp {
/**
* 默认找到第一个文件进行操作
*
* @param req
* @param c
* @return
*/
public static FI upOne(HttpServletRequest req, Class extends FileModel> c) {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (!isMultipart) {
return null;
}
FileModel fm = FileModelData.get(c);
FI fi = new FI();
doUpOne(findFile(getFileItems(req, fm)), fm, fi);
return fi;
}
/**
* 找到指定name的文件进行操作
*
* @param req
* @param c
* @param name
* @return
*/
public static FI upOne(HttpServletRequest req, Class extends FileModel> c, final String name) {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (!isMultipart) {
return null;
}
FileModel fm = FileModelData.get(c);
FI fi = new FI();
doUpOne(findFile(getFileItems(req, fm), name), fm, fi);
return fi;
}
public static List upVast(HttpServletRequest req, Class extends FileModel> c) {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (!isMultipart) {
return null;
}
FileModel fm = FileModelData.get(c);
List f = new ArrayList();
FI fi;
Iterator iter = getFileItems(req, fm).iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getName().lastIndexOf(".") != -1) {
fi = new FI();
doUpOne(item, fm, fi);
f.add(fi);
}
}
return f;
}
public static List upVast(HttpServletRequest req, Class extends FileModel> c, final String fieldName) {
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if (!isMultipart) {
return null;
}
FileModel fm = FileModelData.get(c);
List f = new ArrayList();
FI fi;
Iterator iter = getFileItems(req, fm).iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getName().lastIndexOf(".") != -1 && item.getFieldName().equalsIgnoreCase(fieldName)) {
fi = new FI();
doUpOne(item, fm, fi);
f.add(fi);
}
}
return f;
}
private static void doUpOne(FileItem item, FileModel fm, FI fi) {
int filenamelen=item.getName().lastIndexOf(WebContext.getWebContext().islinux?"/":"\\");
fi.fileName = filenamelen==-1?item.getName():item.getName().substring(filenamelen+1);
if (fm.isError_toCheckType(item.getContentType())) {
fi.message = fm.getFileConfig().message_error_fileType;
return;
}
if (fm.isError_toCheckSuffix(fi.fileName.substring(fi.fileName.lastIndexOf(".") + 1))) {
fi.message = fm.getFileConfig().message_error_fileNameSuffix;
return;
}
if (fm.isError_toSize(item.getSize())) {
fi.message = fm.getFileConfig().message_error_fileSize_max;
return;
}
fm.startFI(fi);
try {
item.write(new File(fm.getFileConfig().path_save_real + fi.saveName));
fi.isok = true;
fi.message = fm.getFileConfig().message_success_upload;
return;
} catch (Exception ex) {
Logger.getLogger(FileUp.class.getName()).log(Level.SEVERE, null, ex);
}
fi.message = fm.getFileConfig().message_error_upload;
}
private static final Map STATIC_PATH_MAP_OBJECT = new HashMap();
private static List getFileItems(HttpServletRequest req, FileModel fm) {
try {
DiskFileItemFactory factory = STATIC_PATH_MAP_OBJECT.get(fm.getFileConfig().path_temp_real);
// org.apache.commons.fileupload.servlet.FileCleanerCleanup
if (null == factory) {
FileCleaningTracker fileCleaningTracker
= FileCleanerCleanup.getFileCleaningTracker(req.getServletContext());
factory = new DiskFileItemFactory(
fm.getFileConfig().fileSizeThreshold, fm.getFileConfig().path_temp_real.isEmpty() //缓存路径为这,采用默认路径
? (File) req.getServletContext().getAttribute("javax.servlet.context.tempdir")
: new File(fm.getFileConfig().path_temp_real)
);
factory.setFileCleaningTracker(fileCleaningTracker);
STATIC_PATH_MAP_OBJECT.put(fm.getFileConfig().path_temp_real, factory);
}
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("utf-8");
return upload.parseRequest(req);
} catch (FileUploadException ex) {
Logger.getLogger(FileUp.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
private static FileItem findFile(List items) {
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getName().lastIndexOf(".") != -1) {
return item;
}
}
return null;
}
private static FileItem findFile(List items, String fieldName) {
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
if (!item.isFormField() && item.getName().lastIndexOf(".") != -1 && fieldName.equalsIgnoreCase(item.getFieldName())) {
return item;
}
}
return null;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy