package com.nfwork.dbfound.web.file;
import java.io.File;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase.SizeLimitExceededException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.nfwork.dbfound.core.Context;
import com.nfwork.dbfound.exception.DBFoundPackageException;
import com.nfwork.dbfound.exception.UploadSizeException;
import com.nfwork.dbfound.util.LogUtil;
public class FileUploadUtil {
public static int maxUploadSize = 10; // 单位M
public static void initFileUpload(Context context) {
try {
if (ServletFileUpload.isMultipartContent(context.request)) { // 创建文件处理工厂,它用于生成
// FileItem 对象。
DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置文件的缓存路径
factory.setSizeThreshold(1024 * 1024); // 设置最多只允许在内存中存储的数据,单位:字节
ServletFileUpload upload = new ServletFileUpload(factory);
String encoding = context.request.getCharacterEncoding();
upload.setHeaderEncoding(encoding);
// 设置允许用户上传文件大小,单位:字节
upload.setSizeMax(1024 * 1024 * maxUploadSize);
List<FileItem> items = null;
items = upload.parseRequest(context.request);
// 下面对每个字段进行处理,分普通字段和文件字段
Iterator it = items.iterator();
while (it.hasNext()) {
FileItem fileItem = (FileItem) it.next();
String filedName = fileItem.getFieldName();
if (fileItem.isFormField()) {
context.setParamData(filedName, fileItem.getString(encoding));
} else {
context.setParamData(filedName, fileItem);
context.setParamData(filedName + "_name", fileItem.getName().substring(
fileItem.getName().lastIndexOf("\\") + 1));
context.setParamData(filedName + "_type", fileItem.getContentType());
context.setParamData(filedName + "_size", FileSizeCalculator.getFileSize(fileItem.getSize()));
}
}
}
} catch (SizeLimitExceededException e) {
throw new UploadSizeException("上传附件大小超过最大限制" + maxUploadSize + "M");
} catch (Exception e) {
throw new DBFoundPackageException("文件上传处理异常:" + e.getMessage(), e);
}
}
public void deleteDistFile(String fileName) throws Exception {
File file = new File(FileUtil.getDownLoadFolder(fileName));
file.delete();
}
public void saveToDisk(FileItem fileItem) {
// //保存文件,其实就是把缓存里的数据写到目标路径下
if (fileItem.getName() != null && fileItem.getSize() != 0) {
File fullFile = new File(fileItem.getName());
File newFile = new File("c:/temp/" + fullFile.getName());
try {
fileItem.write(newFile);
} catch (Exception e) {
LogUtil.error(e.getMessage(), e);
}
}
}
}