springmvc文件上传和下载
时间: 2024-01-21 18:52:34 浏览: 31
对于Spring MVC来说,文件上传和下载是常见的功能之一。下面是关于如何实现文件上传和下载的基本步骤:
1. 文件上传:
- 在Spring MVC的配置文件中,添加`CommonsMultipartResolver`来解析文件上传请求。
- 创建一个表单页面,使用`enctype="multipart/form-data"`属性,确保可以上传文件。
- 在Controller中创建一个处理文件上传请求的方法,使用`@RequestParam("file") MultipartFile file`注解来接收文件。
- 在方法内部,可以通过`file.getInputStream()`来获取文件的输入流,进而实现上传操作。
2. 文件下载:
- 在Controller中创建一个处理文件下载请求的方法。
- 在方法内部,使用`HttpServletResponse`对象设置响应头信息,包括`Content-Disposition`和`Content-Type`。
- 通过`response.getOutputStream()`获取输出流,并将文件的内容写入输出流。
需要注意的是,为了确保文件上传和下载的安全性,可以进行一些额外的处理,例如限制文件类型、大小等。
以下是一个示例代码,用于演示文件上传和下载:
```java
@Controller
public class FileController {
@Autowired
private ServletContext servletContext;
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(@RequestParam("file") MultipartFile file) {
try {
String fileName = file.getOriginalFilename();
String filePath = servletContext.getRealPath("/uploads/") + fileName;
file.transferTo(new File(filePath));
return "redirect:/success";
} catch (Exception e) {
e.printStackTrace();
return "redirect:/error";
}
}
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletResponse response) {
try {
String fileName = "example.txt";
String filePath = servletContext.getRealPath("/downloads/") + fileName;
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
response.setContentType("application/octet-stream");
IOUtils.copy(inputStream, response.getOutputStream());
response.flushBuffer();
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
上述代码中,`servletContext.getRealPath()`方法用于获取文件的实际路径,`IOUtils.copy()`方法用于将文件内容写入输出流。
请注意,上述示例仅为演示目的,实际应用中可能需要进行更多的异常处理、文件校验等操作。