java mvc框架 图片_Spring MVC框架 - 图片上传之展现上传的图片

本文介绍了一个基于Spring MVC的图片上传及展示解决方案。通过使用@ModelAttribute和@SessionAttributes注解,实现了图片路径在不同请求间的传递,并成功展示了用户上传的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果我们能够展现用户所上传的图片,那就非常棒了,对吧?为了实现这一点,需要在PictureUploadController 中添加一个模型属性:@ModelAttribute("picturePath")

public Resource picturePath() {

return anonymousPicture;

}

现在,当我们获取上传的图片时,就可以将其注入进来并检索它的值:@RequestMapping(value = "/uploadedPicture")

public void getUploadedPicture(HttpServletResponse response, @ModelAttribute("picturePath") Path picturePath) throws IOException {

response.setHeader("Content-Type", URLConnection.guessContentTypeF romName(picturePath.toString()));

Files.copy(picturePath, response.getOutputStream());

}

@ModelAttribute 是一个非常便利的注解,我们可以通过带有该注解的方法来创建模型属性。通过使用相同的注解,它们就可以注入到控制器方法之中。借助上面的这些代

码,只要不重定向页面,就可以始终在模型中得到picturePath 参数。它的默认值是在属性中所定义的匿名图片。

当文件上传之后,我们需要更新这个值,修改一下onUpload 方法:@RequestMapping(value = "/upload", method = RequestMethod.POST)

public String onUpload(MultipartFile file, RedirectAttributes redirectAttrs, Model model) throws IOException {

if (file.isEmpty() || !isImage(file)) {

redirectAttrs.addFlashAttribute("error", "Incorrect file.Please upload a picture.");

return "redirect:/upload";

}

Resource picturePath = copyFileToPictures(file);

model.addAttribute("picturePath", picturePath);

return "profile/uploadPage";

}

通过将模型注入进来,我们就能在上传完成之后,更新picturePath 参数的值。

现在,问题在于我们的两个方法,即onUpload 和getUploadedPicture 是在不同的请求中调用的。而模型属性在不同的请求间会进行重置。

这样的话,我们就需要将picturePath 参数定义为会话属性,要实现这一点,只需在控制器类上添加另外一个注解即可:

@Controller

@SessionAttributes("picturePath")

public class PictureUploadController {

}

为了处理一个简单的会话属性,我们添加了好几个注解。现在,能够得到如图所示的结果。

8b53bc1da553ed27314b815ac7aa7cd5.png

这种方式让代码的组合变得非常容易,我们也没有直接使用HttpServletRequest 或HttpSession,另外,我们的对象在编码时输入起来会非常简便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值