下面是Java SpringBoot实现文件上传功能的详细攻略:
1. 项目依赖
首先需要在SpringBoot项目中引入以下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
其中spring-boot-starter-web是SpringBoot中常用的Web依赖,commons-fileupload是Apache提供的一个文件上传工具。
2. 上传控制器
在SpringBoot中编写文件上传控制器可以非常简单,只需要使用SpringMVC中提供的MultipartFile即可实现文件上传。
@RestController
public class FileUploadController {
@PostMapping("/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
// 获取文件名
String fileName = file.getOriginalFilename();
// 获取文件类型
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
// 创建文件保存路径
String filePath = "E:/upload/";
// 创建文件名
String newFileName = UUID.randomUUID().toString().replace("-", "") + "." + fileType;
// 创建文件保存目录
File dir = new File(filePath);
if (!dir.exists()) {
dir.mkdirs();
}
// 创建文件保存路径
File dest = new File(filePath + newFileName);
// 保存文件
file.transferTo(dest);
// 返回文件访问路径
return "http://localhost:8080/file/" + newFileName;
}
}
以上控制器会将文件保存到指定路径,并且返回文件的访问路径。
3. 页面展示
为了展示文件上传的效果,可以使用HTML和JavaScript编写一个页面来测试文件上传的功能。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>File Upload</title>
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<script>
$(function() {
// 添加选择文件的按钮点击事件
$("#btnSelect").click(function() {
$("#file").click();
});
// 添加选择文件改变事件
$("#file").change(function() {
// 显示文件名
var fileName = $("#file").val();
$("#txtFileName").val(fileName);
// 显示上传按钮
$("#btnUpload").show();
});
});
function upload() {
// 创建FormData对象
var formData = new FormData();
// 添加文件
formData.append("file", $("#file").get(0).files[0]);
// 发送上传请求
$.ajax({
url: '/upload',
type: 'POST',
data: formData,
contentType: false,
processData: false,
success: function (data) {
// 显示上传结果
$("#txtUrl").val(data);
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
// 显示错误信息
alert("上传失败");
}
});
}
</script>
</head>
<body>
<div>
<input type="text" id="txtFileName" readonly="readonly" style="width: 200px" />
<input type="button" id="btnSelect" value="选择文件" />
<input type="button" id="btnUpload" value="上传" onclick="upload();" style="display: none" />
</div>
<br />
<div>
<input type="text" id="txtUrl" readonly="readonly" style="width: 500px" />
</div>
<br />
<div>
<input type="file" id="file" accept="image/*" style="display: none" />
</div>
</body>
</html>
以上页面会展示一个选择文件的按钮和一个上传按钮,选择文件后,上传按钮会显示出来,点击上传按钮可以将文件上传到服务器,上传成功后会在页面上显示文件的访问路径。
4. 文件下载
Spring Boot也提供了相应的代码来支持文件的下载功能,我们通过添加一个下载的控制器的方式来支持。
@RestController
@RequestMapping("/download")
public class FileDownloadController {
@GetMapping("/{fileName}")
public ResponseEntity<byte[]> download(@PathVariable("fileName") String fileName) throws IOException {
// 获取文件路径
String filePath = "E:/upload/";
File file = new File(filePath + fileName + ".jpg");
// 构建HttpHeaders
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", URLEncoder.encode(file.getName(), "UTF-8"));
// 返回文件流
return new ResponseEntity<>(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);
}
}
以上的控制器中通过PathVariable注解,可以从请求路径中获取文件名,并将文件保存的路径固定到“E:/upload/”目录下,最后通过FileUtils将文件保存到ByteArrayOutputStream,并将文件流及HttpHeaders响应到客户端。从而实现文件下载的功能。
以上是Java SpringBoot实现文件上传和下载的示例代码及详细讲解。希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java SpringBoot实现文件上传功能的示例代码 - Python技术站