1. 创建一个上传文件的HTML表单:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
2. 创建一个UploadController来处理文件上传请求:
@Controller
public class UploadController {
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
// 检查文件是否为空
if (file.isEmpty()) {
return "redirect:/error";
}
try {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件的字节数据
byte[] bytes = file.getBytes();
// 文件保存路径
String filePath = "/path/to/save/" + fileName;
// 将文件保存到指定路径
Files.write(Paths.get(filePath), bytes);
return "redirect:/success";
} catch (IOException e) {
e.printStackTrace();
return "redirect:/error";
}
}
}
3. 创建一个DownloadController来处理文件下载请求:
@Controller
public class DownloadController {
@GetMapping("/download")
public ResponseEntity<Resource> downloadFile() {
// 文件路径
String filePath = "/path/to/file";
// 创建文件对象
File file = new File(filePath);
// 创建文件资源对象
Resource resource = new FileSystemResource(file);
// 设置响应头
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getName());
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(resource);
}
}
请注意,上述代码中的文件保存路径和下载文件路径需要根据实际情况进行修改
在pom.xml文件中导入依赖的包:
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 必须和用户JSP 的pageEncoding属性一致,以便正确解析表单的内容 -->
<property name="defaultEncoding" value="UTF-8"></property>
<!-- 文件最大大小(字节) 1024*1024*50=50M-->
<property name="maxUploadSize" value="52428800"></property>
<!--resolveLazily属性启用是为了推迟文件解析,以便捕获文件大小异常-->
<property name="resolveLazily" value="true"/>
</bean>
create table t_book_file
(
file_id varchar(32) primary key comment '文件ID',
real_name varchar(50) not null comment '文件名称',
content_type varchar(50) not null comment '文件类型',
url varchar(256) not null comment '文件路径'
);
在book表中加入一个字段来保存上传文件的ID,即:与file_id字段对应。
编辑index.jsp
增加上传链接打开进入上传的页面
上传页面
该截图中的代码只是保存了图片,还需要将图片的信息保存到文件数据表中,请自行完善。
核心代码:
@RequestMapping(value="/download")
public ResponseEntity<byte[]> download(@RequestParam String fileId){
//先根据文件id查询对应图片信息,相关的后台代码省略,自行编写
//下载关键代码
File file=new File(bookFile.getUrl());
HttpHeaders headers = new HttpHeaders();//http头信息
String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
headers.setContentDispositionFormData("attachment", downloadFileName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//MediaType:互联网媒介类型 contentType:具体请求中的媒体类型信息
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
}
下载功能链接,示例代码
<!-- 判断是否 存在图片,如果有图片则提供下载 -->
<c:if test="${not empty b.bookImages}">
<a href="${ctx}/bookFile/download?fileId=${b.bookImages}">下载图片</a>
</c:if>