Java:文件上传
定义文件路径和缓冲路径:
public static final String FILE_PATH = "D:/TEST";
public static final String FILE_IO_PATH = "D:/TEST_IO";
定义允许上传的文件扩展名:
private String Ext_Name = "doc,txt,sh,json,zip,exe,jar";
目录检查:
File saveFileDir = new File(savePath);
if (!saveFileDir.exists()) {
// 创建临时目录
saveFileDir.mkdirs();
}
上传时生成临时文件保存目录 :
String tmpPath = FILE_IO_PATH;
File tmpFile = new File(tmpPath);
if (!tmpFile.exists()) {
// 创建临时目录
tmpFile.mkdirs();
}
设置消息提示:
String message = "";
文件上传:
try {
// 创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置工厂的缓冲区的大小
factory.setSizeThreshold(1024 * 10);// 设置缓冲区的大小为100KB
// 设置上传时生成的临时文件的保存目录
factory.setRepository(tmpFile);
// 创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 监听文件上传进度
upload.setProgressListener(new ProgressListener() {
public void update(long readedBytes, long totalBytes,
int currentItem) {
// TODO Auto-generated method stub
System.out.println("当前已处理:" + readedBytes
+ "-----------文件大小为:" + totalBytes + "--"
+ currentItem);
}
});
// 解决上传文件名的中文乱码问题
upload.setHeaderEncoding("UTF-8");
// 判断提交上来的数据是否是上传表单的数据
if (!ServletFileUpload.isMultipartContent(request)) {
return;
}
// 设置上传单个文件的最大值
upload.setFileSizeMax(1024 * 1024 * 100);// 100M
// 设置本次上传的所有文件的总和的最大值
upload.setSizeMax(1024 * 1024 * 500);// 500M
List items = upload.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext()) {
FileItem item = (FileItem) itr.next();
// 普通的输入
if (item.isFormField()) {
// String name = item.getFieldName();
// // 解决数据中文乱码问题
// String value = item.getString("UTF-8");
// System.out.println(name + "=" + value);
continue;
} else
// 上传文件
{
// 得到上传文件的文件名
String fileName = item.getName();
System.out.println("文件名:" + fileName);
if (fileName == null && fileName.trim().length() == 0) {
continue;
}
// 保留文件名部分
fileName = fileName
.substring(fileName.lastIndexOf("\\") + 1);
System.out.println("文件名部分:" + fileName);
// 得到上传文件的扩展名
String fileExt = fileName.substring(
fileName.lastIndexOf(".") + 1).toLowerCase();
System.out.println("上传的文件的扩展名是:" + fileExt);
// 检查扩展名
if (!Ext_Name.contains(fileExt)) {
System.out.println("上传文件扩展名是不允许的扩展名:" + fileExt);
message = message + "文件:" + fileName
+ ",上传文件扩展名是不允许的扩展名:" + fileExt + "<br/>";
break;
}
// 检查文件大小
if (item.getSize() == 0) {
continue;
}
if (item.getSize() > 1024 * 1024 * 100) {
System.out.println("上传文件大小:" + item.getSize());
message = message + "文件:" + fileName + ",上传文件大小超过限制大小:"
+ upload.getFileSizeMax() + "<br/>";
break;
}
// 得到存文件的文件名
String saveFileName = fileName;
System.out.println("存文件的文件名:" + saveFileName);
// 获取上传文件的输入流
InputStream is = item.getInputStream();
// 创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "/"
+ saveFileName);
// 创建一个缓冲区
byte buffer[] = new byte[1024];
// 判断输入流中的数据是否已经读完的标致
int len = 0;
while ((len = is.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
// 关闭输出流
out.close();
// 关闭输入流
is.close();
// 删除临时文件
item.delete();
message = message + "文件:" + fileName + ",上传成功<br/>";
}
}
} catch (FileSizeLimitExceededException e) {
message = message + "上传文件大小超过限制<br/>";
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
request.setAttribute("message", message);
request.getRequestDispatcher("/message.jsp").forward(request,
response);
}
发表评论
要发表评论,您必须先登录。