ssh框架中对文件的上传

. 添加文件上传的选择项
1. 客户端三个注意事项
* method="post"
* enctype="multipart/form-data"
* <input type="file" name="myfile">

2. Struts2框架的使用拦截器完成了文件上传,并且底层使用也是FileUpload开源的组件。
* 提供 FileUpload 拦截器,用于解析 multipart/form-data 编码格式请求,解析上传文件的内容 
* fileUpload拦截器 默认在 defaultStack 栈中, 默认会执行的 

* 在Action中编写文件上传,需要定义三个属性
> 文件类型File ,属性名与表单中file的name属性名一致.
> 字符串类型String , 属性名:前段是name属性名一致 + ContentType;
> 字符串类型String , 属性名:前段是name属性名一致+FileName;

> 最后需要为上述的三个属性提供set方法。

> 可以通过FileUtils提供 copyFile 进行文件复制,将上传文件 保存到服务器端 

代码如下:

 /**
* 文件的上传,需要在CustomerAction类中定义成员的属性,命名是有规则的!!
* private File upload; // 表示要上传的文件
* private String uploadFileName; 表示是上传文件的名称(没有中文乱码)
* private String uploadContentType; 表示上传文件的MIME类型
* 提供set方法,拦截器就注入值了
*/

// 要上传的文件
private File upload;
// 文件的名称
private String uploadFileName;
// 文件的MIME的类型
private String uploadContentType;

public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}


4. 文件上传中存在的问题
* 先配置input逻辑视图
* 在页面中显示错误信息

* 文件上传的总大小默认值是2M,如果超过了2M,程序会报出异常。可以使用<s:actionError>来查看具体信息!
> 解决总大小的设置,找到常量:
* struts.multipart.parser=jakarta -- 默认文件上传解析器,就是FileUpload组件
* struts.multipart.saveDir= -- 文件上传的临时文件存储目录
* struts.multipart.maxSize=2097152 -- 文件上传的最大值(总大小),默认是2M

> 可以在struts.xml中设置常量,修改文件上传的默认总大小!!!
* <constant name="struts.multipart.maxSize" value="5000000"></constant>

5. 还可以通过配置拦截器来设置文件上传的一些属性
* 先在<action>标签中引入文件上传的拦截器
<interceptor-ref name="defaultStack">
<!-- 设置单个上传文件的大小 -->
<param name="fileUpload.maximumSize">2097152</param>
<!-- 设置扩展名 -->
<param name="fileUpload.allowedExtensions">.txt</param>

</interceptor-ref>


jsp代码:

<form action="${pageContext.request.contextPath}/restaurant_edit" method="post" enctype="multipart/form-data">
       
      <table>
        
        <tr>       
        <td> 店铺图片</td>
        <td><input type="file" name="upload"></td>
        </tr>
         <tr>
            <td>店铺名称</td>
            <td><input type="text" name="restaurant_name" value="${restaurant.restaurant_name }"></td>
          </tr> 
          <tr> 
            <td>店铺关键词</td> 
             <td><input type="text" name="keywords" value="${restaurant.keywords }"></td>                
           </tr>   
          <tr>
            <td>店铺详情</td>
            <td><input type="text" name="detail" value="${restaurant.detail }"></td>
          </tr>
          <tr>  
            <td>店铺营业时间</td>
            <td><input type="text" name="business_time" value="${restaurant.business_time }"></td>
           </tr>
           <tr> 
            <td>店铺电话</td>
             <td><input type="text" name="tel" value="${restaurant.tel }"></td>
           </tr>
           <tr> 
            <td>店铺位置</td> 
             <td><input type="text" name="address" value="${restaurant.address }"></td>                
           </tr>
           <tr>
             <td><input type="submit" value="提交"></td>
           </tr>    
      </table>
  </form>

action中的代码:

 /**
* 文件的上传,需要在CustomerAction类中定义成员的属性,命名是有规则的!!
* private File upload; // 表示要上传的文件
* private String uploadFileName; 表示是上传文件的名称(没有中文乱码)
* private String uploadContentType; 表示上传文件的MIME类型
* 提供set方法,拦截器就注入值了
*/

// 要上传的文件
private File upload;
// 文件的名称
private String uploadFileName;
// 文件的MIME的类型
private String uploadContentType;

public void setUpload(File upload) {
this.upload = upload;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
    public String edit() throws IOException{
    // 做文件的上传,说明用户选择了上传的文件了
    if(uploadFileName != null){
    // 打印
    System.out.println("文件类型:"+uploadContentType);
    // 把文件的名称处理一下
    String uuidname = UploadUtils.getUUIDName(uploadFileName);
    // 把文件上传到D:\\apache-tomcat-7.0.52\\webapps\\upload
    String path=ServletActionContext.getServletContext().getRealPath("/business/image/");

                               (这里我把图片保存在项目下的/business/image/目录中,或者保存在服务器中,一般都会保持在图片服务器中。)
    //String path = "F:\\apache-tomcat-7.0.42\\webapps\\upload\\";
    // 创建file对象
    File file = new File(path+"//"+uuidname);
    // 简单方式
    FileUtils.copyFile(upload, file);
    System.out.println(path+uuidname);
    //System.out.println("111"+restaurant);
    // 把上传的文件的路径,保存到客户表中
    restaurant.setImg(uuidname);
    Business business=(Business) ServletActionContext.getRequest().getSession().getAttribute("exitBusiness");
    restaurant.setRestaurant_id(business.getBid());
    System.out.println("111"+restaurant);
    }
   
    // 修改客户成功了
   
    restaurantService.update(restaurant);
    //查询,返回展示页面
    findById();
    return "store";
    }

service代码:

@Transactional
public void update(Restaurant restaurant) {
restaurantDao.update(restaurant);

}

dao  代码:

public void update(Restaurant restaurant) {
this.getHibernateTemplate().update(restaurant);
}


前端显示界面:

 <div class="clearfix h44"></div>
 
 <div class="store_img" ng-click="func_showAction()">
  <img src="<c:url value='/business/image/${restaurant.img }'/>" alt="" id="store_img">
  <span>图片</span>
 </div>
 <div class="store_name" ui-sref="storeName">
  <span class="store_name_tip">店铺电话</span>
  <span class="store_name_show">${restaurant.tel }
   <i>&gt;</i>
  </span>
 </div>
 <div class="store_name" ui-sref="storeName">
  <span class="store_name_tip">店铺营业时间</span>
  <span class="store_name_show">${restaurant.business_time }
   <i>&gt;</i>
  </span>
 </div>
 <div class="store_name" ui-sref="storeName">
  <span class="store_name_tip">店铺详情</span>
  <span class="store_name_show">${restaurant.detail }
   <i>&gt;</i>
  </span>
 </div>
 <div class="store_name" ui-sref="storeName">
  <span class="store_name_tip">店铺名称</span>
  <span class="store_name_show">${restaurant.restaurant_name }
   <i>&gt;</i>
  </span>
 </div>
 <div class="store_name" ui-sref="storeName">
  <span class="store_name_tip">店铺关键词</span>
  <span class="store_name_show">${restaurant.keywords }
   <i>&gt;</i>
  </span>
 </div>
 <div class="clearfix"></div>
 <div class="store_address" ui-sref="storeAddress">
  <span class="store_address_tip">店铺位置</span>
  <span class="store_address_show">${restaurant.address }
   <i>&gt;</i>
  </span>
 </div>
   <input type="button" value="修改" οnclick="edit()">
</ion-view>
</body>
 <script type="text/javascript">
function edit(){
window.location.href="${pageContext.request.contextPath}/restaurant_preEdit";
}
  </script>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值