MultipartFile上传多个文件

该博客介绍了如何在Spring中处理MultipartFile类型的参数,通过一个表单接收多个文件上传,然后利用UploadUtils工具类进行文件存储,并在上传成功后更新相关业务数据。在Controller中,接收到请求后,根据任务ID和用户ID更新Result表的提交状态。

j.jsp页面:

    <form method="post" class="form-x" action="upload" enctype="multipart/form-data">  

Controller:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(HttpServletRequest request,
@RequestParam(value="taskid") int taskid,  //参数名与页面中的name相同
@RequestParam(value = "uploadfile", required = false) MultipartFile[] uploadfile)
{
String currentID=(String) request.getSession().getAttribute("id");
String road=Config.task+taskid+"/"+currentID;
UploadUtils up = new UploadUtils();
if(up.uploadUtils(uploadfile, road))
{
//获得当前用户id
System.out.println("$$$$$"+taskid);
//根据作业ID,和用户ID。修改result表中的submit状态
Result result = new Result();
result.setStuId(currentID);
result.setTaskId(taskid);
result.setSubmit(true);
try {
resultService.updateResult(result);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return"redirect:/joblist";  //返回作业列表

}


工具类中的函数:

//上传,road是文件存放路径

public boolean uploadUtils(MultipartFile[] uploadfile,String road)
{
if(uploadfile!=null && uploadfile.length > 0) 
{
for(MultipartFile file:uploadfile)
{

//设置上传文件位置
        String uploadpath = file.getOriginalFilename();  //获取文件名
        System.out.println("hahahah"+uploadpath);  
               //创建文件夹
           File uploadtargetFile = new File(road,uploadpath);
//判断文件是否存在
           isExists(uploadtargetFile);
//保存文件
if (saveFile(file, uploadtargetFile)) 
{
return true;
}
else
{
return false;
}
   
}

}
return false;
}

//判断该路径下文件是否存在
private boolean isExists(File uploadtargetFile)
{
if (!uploadtargetFile.exists())
   {
    uploadtargetFile.mkdirs(); 
    return true;
}
   else{
    System.out.println("文件已存在");
    return false;
   }
}

//保存文件
private boolean saveFile(MultipartFile file, File uploadtargetFile)
{  
       // 判断文件是否为空  
       if (!file.isEmpty()) {  
           try {  
           file.transferTo(uploadtargetFile);  //写入文件
               return true;  
           } catch (Exception e) {  
               e.printStackTrace();  
           }  
       }  
       return false;  
   }
### Spring Boot 使用 MultipartFile 实现多文件上传Spring Boot 中实现多文件上传功能,可以通过 `MultipartFile` 类型来处理多个文件对象。以下是具体方法以及注意事项。 #### 添加必要的依赖项 为了支持文件上传操作,在项目中需引入相应的依赖库。如果使用的是 Maven 构建工具,则可以添加如下依赖[^2]: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 文件上传 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3</version> </dependency> ``` 上述配置中的 `spring-boot-starter-web` 是核心 Web 支持模块,而 `commons-fileupload` 则提供了额外的文件解析能力。 --- #### 控制器代码示例 通过定义控制器的方法参数为 `List<MultipartFile>` 或数组形式(如 `MultipartFile[] files`),即可接收客户端发送的多个文件数据。下面是一个完整的示例代码片段: ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; @RestController @RequestMapping("/api/upload") public class FileUploadController { private static final String UPLOAD_DIR = "uploads/"; @PostMapping("/multiple") public String uploadMultipleFiles(@RequestParam("files") List<MultipartFile> files) { long successCount = 0L; for (MultipartFile file : files) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); Path path = Paths.get(UPLOAD_DIR + file.getOriginalFilename()); Files.write(path, bytes); successCount++; } catch (IOException e) { return "Failed to upload " + file.getOriginalFilename() + ": " + e.getMessage(); } } } return "Successfully uploaded " + successCount + " out of " + files.size() + " files."; } } ``` 此段代码实现了以下逻辑: - 接收前端递过来的一组文件列表作为请求体的一部分; - 遍历这些文件并逐一保存到指定目录下; - 如果发生异常则返回错误提示信息;否则统计成功数量并反馈给调用方[^1]。 注意:实际部署时应考虑安全性问题,比如验证 MIME 类型、限制最大尺寸等措施。 --- #### 前端 HTML 表单实例 为了让浏览器能够提交包含二进制流的数据包至后端服务端点,通常会采用 `<form>` 标签配合 enctype 属性设置成 multipart/form-data 的方式构建页面表单项。例如: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Multipart Upload Example</title> </head> <body> <form action="/api/upload/multiple" method="post" enctype="multipart/form-data"> Select multiple files: <input type="file" name="files" multiple><br/><br/> <button type="submit">Upload</button> </form> </body> </html> ``` 这里的关键在于设置了 `name="files"` 和属性 `multiple` ,这使得用户可以选择若干个目标文档一起递交上去供后台程序进一步加工处理。 --- #### 注意事项 当涉及到大容量或者高并发场景下的资源管理策略调整时,可能还需要关注以下几个方面: - **临时存储路径优化**:默认情况下 Tomcat 容器会在内部创建一些中间缓存区域用于暂存正在输过程中的块状单元直到整个流程结束为止。 - **线程池隔离机制设计**:为了避免因某些极端情况引发整体系统性能下降甚至崩溃的风险,建议单独开辟专用队列专门负责此类耗时较长的任务执行周期内的调度安排工作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值