如何进行图片上传和使用缩略图

本文介绍如何使用Struts2框架实现文件上传功能,包括创建上传文件夹、配置Struts.xml、设置拦截器及文件大小限制等步骤,并展示了如何在表单中添加上传控件。

在action中的字段属性

private File fileup;// 要上传的文件,与表单中的input标签的name一致
 private String fileupContentType;// 文件类型,固定格式:上传的文件+ContentType
 private String fileupFileName;// 文件名称,固定格式:上传的文件+FileName
 private String path;// 上传服务器的路径名称

//此处省略set和get方法

此处列举添加房间图片的例子

public String add() {
  try {
   // 获取要保存的服务器路径的绝对路径
   String p = ServletActionContext.getServletContext().getRealPath(
     path);
   // 判断该上传的文件夹是否存在
   File file = new File(p);
   if (!file.exists()) {
    file.mkdir();// 如果不存在文件夹,需要创建
   }
   // 生成要保存的文件名称
   String fileName = (new Date()).getTime()
     + fileupFileName.substring(fileupFileName.lastIndexOf("."));
   // 文件上传

   FileUtils.copyFile(fileup, new File(p, fileName));
   // -------------生成缩略图----------------
   ServletRequest request = ServletActionContext.getRequest();
   java.io.File file1 = new java.io.File(request.getRealPath("/")
     + "upload\\" + fileName); // 读入刚才上传的文件
   String newurl = request.getRealPath("/") + "upload/thumb/"
     + fileName;// 新的缩略图保存地址
   Image src = javax.imageio.ImageIO.read(file1); // 构造Image对象
   int old_w = src.getWidth(null); // 得到源图宽
   int old_h = src.getHeight(null); // 得到源图长
   int new_w = 100;
   int new_h = 100;
   BufferedImage tag = new BufferedImage(new_w, new_h,
     BufferedImage.TYPE_INT_RGB);
   tag.getGraphics().drawImage(src, 0, 0, new_w, new_h, null); // 绘制缩小后的图
   FileOutputStream newimage = new FileOutputStream(newurl); // 输出到文件流
   JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
   encoder.encode(tag); // 近JPEG编码
   newimage.close();

   // -------------缩略图结束----------------
   room.setR_picture(fileName);
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

  roomBiz.add(room);
  findAll();
  return "ok";
 }

 

接下来:

(1)我们要创建文件夹:upload文件夹和在upload文件夹下创建一个thumb文件夹(缩略图文件夹)

(2)配置struts.xml文件:

<action name="SysRoom_*" class="action.RoomAction" method="{1}">
   <!--fileupload拦截器-->
   <interceptor-ref name="defaultStack">
    <param name="fileUpload.maximumSize">1024000</param> <!--指定允许上传的文件的最大字节数-->
    <!--指定允许上传的文件的类型  allowedExtensions:指定允许上传的文件的扩展名-->
    <param name="fileUpload.allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/pjpeg</param>
   </interceptor-ref>
   <param name="path">/upload</param>  <!--依赖注入属性-->
   <result name="ok">/admin/room.jsp</result>
   <result name="add">/admin/addRoom.jsp</result>
  </action>

(红色部分每次使用的时候都一样)

 

(3)我们在要进行使用上传文件的表单中进行编写(蓝色部分别忘添加,否则无效果)

 <form action="${actionUrl }" method="post" enctype="multipart/form-data">

 

 <tr>
        <td width="5%" height="20" bgcolor="d3eaef" class="STYLE6">
        <div align="center"><span class="STYLE10">上传图片:</span></div>
        </td>
        <td width="95%" height="20" bgcolor="d3eaef" class="STYLE6">
        <div align="left"><span class="STYLE10"><input type="file" name="fileup" value="${article.a_url }" /></span></div> //红色部分中的name必须和action中的属性fileup一样
        </td>   
      </tr>

 

附加:我们在进行读取图片时:<img src="../upload/${art.a_url }" width="500px" height="300px" />,可以用img进行读取

 

</form>

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值