Java实现文件上传、下载、图片预览的完整攻略
上传文件
- 首先在前端页面设计一个上传文件的form表单,并设置enctype为multipart/form-data。form表单提交时,浏览器会解析其中的文件,并将其封装到一个HTTP请求中,在请求的正文中发送到服务器。
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="file">选择文件:</label>
<input type="file" name="file" id="file" ><br><br>
<input type="submit" name="submit" value="上传文件">
</form>
- 在服务器端编写相应的Controller方法,对上传的文件进行处理和保存。通常情况下,我们会利用SpringMVC框架,在Controller中使用@RequestMapping注解来处理用户的上传请求。具体的实现代码如下:
// 注册Controller
@RequestMapping("/upload")
@Controller
public class UploadController {
// 将上传的文件保存到服务器中的 upload 文件夹下
@PostMapping("/file")
public String upload(@RequestParam("file") MultipartFile file,
RedirectAttributes redirectAttributes) {
File dest = new File("/upload/" + file.getOriginalFilename());
try {
file.transferTo(dest);
redirectAttributes.addFlashAttribute("message", "上传文件成功!");
} catch (IOException e) {
e.printStackTrace();
redirectAttributes.addFlashAttribute("message", "上传文件失败:" + e.getMessage());
}
return "redirect:/upload";
}
}
在上面的代码中,我们通过@RequestParam注解获取文件对象,然后通过MultipartFile的transferTo方法写入到服务器指定的文件夹中。写入时,可以根据file对象的getOriginalFilename()方法获取原始文件名,避免出现重名的冲突。
下载文件
- 在前端页面中,设计下载链接,指向我们在服务器上存储文件的路径,用户在点击链接时,浏览器会自动向服务器发送请求获取文件,并弹出下载选项。
<a href="/download/file?filePath=/upload/example.txt">下载文件</a>
在上面的代码中,我们在请求路径中指定要下载的文件路径。在下面的Controller方法中,我们通过HttpServletRequest的getParameter方法获取到该参数,然后根据该路径读取文件内容并返回。
2. 在服务器端编写相应的Controller方法,用于处理下载请求。具体的实现代码如下:
@GetMapping("/file")
public void download(@RequestParam("filePath") String filePath,
HttpServletResponse response) {
try {
File file = new File(filePath);
FileInputStream fileInputStream = new FileInputStream(file);
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
fileInputStream.close();
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在上面的代码中,我们通过FileInputStream将指定路径的文件读取出来,并将其写入到HttpServletResponse的输出流中。这样浏览器就可以根据我们设置的文件名,自动将文件下载下来。
图片预览
- 在前端页面中,设计展示图片的标签,指向我们在服务器上存储图片的路径,在用户浏览网页时,页面会自动从服务器获取图片并展示。
<img src="/preview/image?sourcePath=/upload/example.jpg" alt="example">
在上面的代码中,我们在img标签中指定了要展示的图片路径。在下面的Controller方法中,我们将根据这个路径将图片读取出来并返回。
2. 在服务器端编写相应的Controller方法,用于处理展示图片的请求。具体的实现代码如下:
@GetMapping("/image")
public void previewImage(@RequestParam("sourcePath") String sourcePath,
HttpServletResponse response) {
try {
FileInputStream fileInputStream = new FileInputStream(sourcePath);
ServletOutputStream outputStream = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, len);
}
fileInputStream.close();
outputStream.flush();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
在上面的代码中,我们根据请求参数指定的路径读取图片,并将其写入到HttpServletResponse的输出流中。由于在HTML中的img标签中已经指定了要展示的图片,因此我们只需要在服务器端返回该图片内容即可。
至此,我们已经实现了Java语言中的文件上传、下载和图片预览功能,这些功能无论是在Web应用程序或者手机应用程序中,都是非常关键的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java实现文件上传、下载、图片预览 - Python技术站