上传文件到服务器上的方法:
1:使用commons-fileupload代码如下:
1:使用commons-fileupload代码如下:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(10*1024); // 设置上传缓冲大小(10K)
factory.setRepository(uploadTempDir); // 设置上传临时存放文件夹(文件尺寸大于上传缓存容量)
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setFileSizeMax(20*1024*1024); // 设置上传文件允许的最大尺寸(20M)
List items = null;
// 解析上传请求并判断是否超出允许上传的最大尺寸
try {
items = upload.parseRequest(request);
} catch (FileSizeLimitExceededException e) { // 如果超出允许上传的最大尺寸
e.printStackTrace();
logger.error(ExceptionUtil.getStackTraceMessage(e));
uploadResult.put("success", new Boolean(false));
uploadResult.put("errorMessage", "文件大小超过20MB");
return uploadResult;
}
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (!item.isFormField()) {
originalFileName = item.getName();
// 如果文件域为空或者文件大小为零则进入下次循环
if (StringUtils.isBlank(originalFileName) || item.getSize() == 0) {
continue;
}
// 获取原始文件名称
originalFileName = StringUtils.trimToEmpty(StringUtils.substring(originalFileName, StringUtils.lastIndexOf(originalFileName, "\\") + 1));
// 获取原始文件后缀
fileExt = StringUtils.lowerCase(StringUtils.trimToEmpty(StringUtils.substring(originalFileName, StringUtils.lastIndexOf(originalFileName, "."))));
// 生成文件在服务器上实际存储名称
realFileNameAtServer = DateUtil.getDate("yyyyMMddHHmmssSSS") + fileExt;
// 生成文件在服务器上实际存储位置
realFilePath = StringUtils.trimToEmpty(realFilePath) + "/" + realFileNameAtServer;
// 读取上传文件并保存在服务器指定目录中
int readbyte = -1; // 每次实际读入的字节数
byte[] buff = new byte[1024]; // 存储每次读取的数据
BufferedInputStream bis = null; // 缓存输入流
BufferedOutputStream bos = null; // 缓存输出流
try {
bis = new BufferedInputStream(item.getInputStream(), buff.length);
bos = new BufferedOutputStream(new FileOutputStream(new File(realFilePath)));
while((readbyte = bis.read(buff, 0, buff.length)) > -1) {
bos.write(buff, 0, readbyte);
}
bos.flush();
} catch(IOException ioe) {
ioe.printStackTrace();
logger.error(ExceptionUtil.getStackTraceMessage(ioe));
uploadResult.put("success", new Boolean(false));
uploadResult.put("errorMessage", "上传文件失败");
return uploadResult;
} catch(Exception e) {
e.printStackTrace();
logger.error(ExceptionUtil.getStackTraceMessage(e));
uploadResult.put("success", new Boolean(false));
uploadResult.put("errorMessage", "上传文件失败");
return uploadResult;
} finally {
try {
// 关闭输出流
if(bos != null) {
bos.close();
}
// 关闭输入流
if(bis != null) {
bis.close();
}
} catch(IOException ioe) {
ioe.printStackTrace();
logger.error(ExceptionUtil.getStackTraceMessage(ioe));
}
}
}
}
}