上传本地文件到服务器上

上传文件到服务器上的方法:
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));
}
}


}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值