码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2将图片输出到页面

时间:2017-08-19 20:05:01      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:get   class   auth   adf   pojo   vax   ota   struts2   tac   

        在做CRUD的过程中,添加页面是个表单,表单里面有一项是上传头像文件。这样表单提交后,头像文件上传了。
但这个文件存的地址是本地硬盘的一个文件夹。在编辑页面要做这个头像的回显的话,就需要我们去本地文件读到这张图片,
然后将这张图片输出到页面。
        笔者很久都没写过怎么把图片输出到页面了,在网上看了点资料,感觉不够清晰。于是决定自己做下笔记,方便后续查阅。

一、思路

        既然是将图片回显,那么页面上图片的src属性肯定就是一个http请求,后台处理这个请求是输出一张图片到浏览器
        (1) 编辑页面的使用 <img />  标签,然后src属性值为一个http请求,这个请求带了参数
        (2) 后台通过这个请求带的参数,去数据库中查出图片的地址
        (3) 后台拿到图片地址后,用输入流和输出流的方法,把图片读进来再输出到浏览器

二、代码

        (1)页面的代码
  1. <td class="tdBg" width="200px">头像:</td>
  2. <td>
  3. <!-- 显示头像 -->
  4. <img src="${basePath}nsfw/user_showHeadImg.action?user.id=${user.id}" width="100" height="100"/>
  5. <input type="file" name="headImg" accept = "image/*"/>
  6. </td>
        (2)后台代码
                 这里还有个图片上传的方法没删掉,方便后续查阅
  1. package com.tax.web.user;
  2. import java.io.BufferedInputStream;
  3. import java.io.BufferedOutputStream;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.IOException;
  7. import java.util.List;
  8. import java.util.UUID;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.commons.io.FileUtils;
  11. import org.apache.commons.lang3.StringUtils;
  12. import org.apache.struts2.ServletActionContext;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import com.opensymphony.xwork2.ActionSupport;
  15. import com.tax.pojo.nsfw.User;
  16. import com.tax.service.UserService;
  17. /**
  18. * UserAction
  19. * @author ZENG.XIAO.YAN
  20. * @date 2017年7月11日 上午10:06:05
  21. * @version v1.0
  22. */
  23. public class UserAction extends ActionSupport {
  24. private static final long serialVersionUID = 4526496105243102063L;
  25. @Autowired
  26. private UserService userService;
  27. private User user;
  28. /** 文件上传的3个属性 */
  29. private File headImg; // 这个名字和表单的name的值一样
  30. private String headImgFileName;
  31. private String headImgContentType;
  32. /** 存放图片的本地文件夹 */
  33. private static final String USER_IMAGE_DIR = "D:/upload";
  34. /**
  35. * 展示用户头像 Action方法
  36. * @return 将头像输出到页面
  37. * @see 访问方式:tax/nsfw/user_showHeadImg.action?user.id=xxxx
  38. */
  39. public String showHeadImg() {
  40. // 这个user的id是通过前台传过来的
  41. if(null != user && user.getId() != null) {
  42. // 通过用户id去数据库查找出用户头像的地址
  43. String img = userService.findById(user.getId()).getHeadImg();
  44. if(StringUtils.isNotBlank(img)) {
  45. // 拼接成本地地址,如:D:/upload/user/0dc14d2b81444ce1b5600a3fe43f9f30.jpg
  46. // USER_IMAGE_DIR = D:/upload
  47. // img 如:user/0dc14d2b81444ce1b5600a3fe43f9f30.jpg
  48. File imgFile = new File(USER_IMAGE_DIR + "/" + img);
  49. // 如果图片文件存在,就输出到页面
  50. if(imgFile.exists()) {
  51. /** 获取HttpServletResponse */
  52. HttpServletResponse response = ServletActionContext.getResponse();
  53. /** 设置响应的内容类型 */
  54. response.setContentType("images/jpeg");
  55. /** 以下3行代码用于设置禁止浏览器缓存该图片 */
  56. response.setDateHeader("expries", -1);
  57. response.setHeader("Cache-Control", "no-cache");
  58. response.setHeader("Prama", "no-cache");
  59. // 以下为IO流操作
  60. BufferedInputStream bis = null;
  61. BufferedOutputStream bos = null;
  62. try {
  63. bis = new BufferedInputStream(new FileInputStream(imgFile));
  64. // 这个Response.getOutputStream()是用于输出到浏览器的输出流
  65. bos = new BufferedOutputStream(response.getOutputStream());
  66. byte[] buffer = new byte[1024];
  67. int len = 0;
  68. while ((len = bis.read(buffer)) != -1) {
  69. bos.write(buffer, 0, len);
  70. }
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. } finally {
  74. // 关流
  75. if (bis != null) {
  76. try {
  77. bis.close();
  78. } catch (IOException e) {
  79. e.printStackTrace();
  80. }
  81. }
  82. if (bos != null) {
  83. try {
  84. bos.close();
  85. } catch (IOException e) {
  86. e.printStackTrace();
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
  93. // 这里没有返回视图,直接返回NONE
  94. return NONE;
  95. }
  96. /**
  97. * 专门用于文件上传的方法,返回文件路径
  98. * @return 文件路径
  99. */
  100. private String uploadFile() {
  101. try {
  102. if (null != headImg) {
  103. // 获取存放文件夹路径
  104. // USER_IMAGE_DIR = D:/upload
  105. String prePath = USER_IMAGE_DIR.concat("/user");
  106. if(!new File(prePath).exists()) {
  107. new File(prePath).mkdirs();
  108. }
  109. // 新的文件名
  110. String fileName = UUID.randomUUID().toString().replaceAll("-", "")
  111. .concat(headImgFileName.substring(headImgFileName.lastIndexOf(".")));
  112. // 用common-io.jar的工具copy文件
  113. FileUtils.copyFile(headImg, new File(prePath,fileName));
  114. return "user/".concat(fileName);
  115. }
  116. } catch (IOException e) {
  117. e.printStackTrace();
  118. }
  119. return null;
  120. }
  121. /** setter and getter method */
  122. public User getUser() {
  123. return user;
  124. }
  125. public void setUser(User user) {
  126. this.user = user;
  127. }
  128. public File getHeadImg() {
  129. return headImg;
  130. }
  131. public void setHeadImg(File headImg) {
  132. this.headImg = headImg;
  133. }
  134. public String getHeadImgFileName() {
  135. return headImgFileName;
  136. }
  137. public void setHeadImgFileName(String headImgFileName) {
  138. this.headImgFileName = headImgFileName;
  139. }
  140. public String getHeadImgContentType() {
  141. return headImgContentType;
  142. }
  143. public void setHeadImgContentType(String headImgContentType) {
  144. this.headImgContentType = headImgContentType;
  145. }
  146. }


Struts2将图片输出到页面

标签:get   class   auth   adf   pojo   vax   ota   struts2   tac   

原文地址:http://www.cnblogs.com/zeng1994/p/7397610.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!