好的。对于Java文件上传,常见的方式有单文件上传和多文件上传两种。
一、单文件上传
1.前端通过表单实现文件选择和提交操作,后端利用Apache的FileUpload组件进行接收处理。
<form action="upload" enctype="multipart/form-data" method="post">
<input type="file" name="file"><br>
<input type="submit" value="上传">
</form>
2.后端利用FileUpload组件进行接收处理,解析出文件流并保存。
public String upload(HttpServletRequest request) throws IOException, ServletException {
// 创建一个处理工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小
factory.setSizeThreshold(1024 * 1024 * 10);
// 创建文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传的文件最大值
upload.setSizeMax(1024 * 1024 * 50);
// 解析request请求
List<FileItem> items = upload.parseRequest(request);
// 文件名
String fileName = null;
// 文件内容
InputStream is = null;
for (FileItem item : items) {
// 判断是否是上传文件
if (!item.isFormField()) {
// 文件名
fileName = item.getName();
// 文件内容
is = item.getInputStream();
break;
}
}
// 将文件内容写入磁盘
FileOutputStream fos = new FileOutputStream(new File("fileDir", fileName));
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
is.close();
return "success";
}
二、多文件上传
1.前端通过表单实现文件选择和提交操作,注意表单中的file input需要添加multiple属性。
<form action="upload" enctype="multipart/form-data" method="post">
<input type="file" name="files" multiple><br>
<input type="submit" value="上传">
</form>
2.后端利用FileUpload组件进行接收处理,解析出文件流并保存。
public String upload(HttpServletRequest request) throws IOException, ServletException {
// 创建一个处理工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置缓冲区大小
factory.setSizeThreshold(1024 * 1024 * 10);
// 创建文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传的文件最大值
upload.setSizeMax(1024 * 1024 * 50);
// 解析request请求
List<FileItem> items = upload.parseRequest(request);
// 文件名
List<String> fileNames = new ArrayList<>();
// 文件内容
List<InputStream> iss = new ArrayList<>();
for (FileItem item : items) {
// 判断是否是上传文件
if (!item.isFormField()) {
// 文件名
fileNames.add(item.getName());
// 文件内容
iss.add(item.getInputStream());
}
}
// 将文件内容写入磁盘
for (int i=0; i<fileNames.size(); i++) {
FileOutputStream fos = new FileOutputStream(new File("fileDir", fileNames.get(i)));
byte[] buffer = new byte[1024];
int len;
while ((len = iss.get(i).read(buffer)) != -1) {
fos.write(buffer, 0, len);
}
fos.close();
iss.get(i).close();
}
return "success";
}
以上是Java实现文件上传的完整攻略。需要注意的是,关于文件上传需要考虑的问题还有很多,例如文件类型、文件大小、并发、服务器负载等,需要根据实际需求和实际情况进行灵活处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 文件上传(单文件与多文件) - Python技术站