struts2上传图片的全过程

struts2上传图片的过程

1、写一个上传的jsp页面upload_image.jsp,内容如下:
<body>
<center>
  
 <font color="red"><s:fielderror/></font>
  
     <s:form action="uploadOne" method="post"
enctype="multipart/form-data">
      
     <s:file name="file"
label="文件1"></s:file>
      
     <s:file name="file"
label="文件2"></s:file>
      
     <s:file name="file"
label="文件3"></s:file>
      
     <s:file name="file"
label="文件4"></s:file>
      
     <s:submit label="上传"/>
  
     </s:form>  
 
</center>
</body>

解析:A、
form里面的method必须是post,enctype="multipart/form-data"上传文件必须这样写
     
B、<s:fielderror/>这个是图片格式或者大小出错的错误提示---要在struts.xml里面先配置
     
C、name="file",批量上传name的值要一样

2、创建一个action--我的包是com.upload.one
public
class UploadImageAction extends ActionSupport{
    private
List<File> file;
    private List<String>
fileFileName;
    private List<String>
fileContentType;
    
    public String
execute() throws IOException{
  
 //得到工程保存图片的路径
        String root =
ServletActionContext.getRequest().getRealPath("/upload");
      
 
       
//循环上传的文件
        for(int i = 0 ; i <
file.size() ; i
++){
           
InputStream is = new
FileInputStream(file.get(i));
          
 
           
//得到图片保存的位置(根据root来得到图片保存的路径在tomcat下的该工程里)
           
File destFile = new
File(root,this.getFileFileName().get(i));
            
           
//把图片写入到上面设置的路径里
           
OutputStream os = new
FileOutputStream(destFile);
           
byte[] buffer = new
byte[400];
           
int length  = 0
;
           
while((length =
is.read(buffer))>0){
               
os.write(buffer, 0,
length);
           
}
           
is.close();
           
os.close();
       
}
        return
SUCCESS;
   
}
}

解析:在这个action里面做了几个测试
    
要在WebRoot下面新建一个文件夹--upload
  
 A、一个一个的打印,明白每个变量到底是干嘛的,到底得到些什么值
  
 B、我图片存放的路径改到了自己想要的路径下面,结果在页面显示的时候,决绝路径无法显示
  
    可能在显示的时候哪里写错了
       
C、刚开始以后要把得到的图片的名称一个一个得手动添加到fileFileName,结果用
      
fileFileName.add(图片名称)后,fileFileName的length比添加之前多了一倍
          
于是明白,在命名的时候要遵循一个规律,这个样的话fileFileName自动的把图片名称
      
一个一个的添加到里面,不用自己添加

3、配置struts.xml文件
<struts>
  
 <!-- 指定国际化资源文件的baseName为messageResource -->
    
<constant name="struts.custom.i18n.resources"
value="messageResource"/>
    
  
 <!-- 设置该应用使用的解码集 -->
     <constant
name="struts.i18n.encoding" value="utf-8"/>
 
   
 <!-- 上传的全部图片的最大限制-->
     <constant
name="struts.multipart.maxSize" value="1024102400"/>
   
 
    <!-- 配置action->
  
 <package name="default" extends="struts-default">
  
     <action name="uploadOne"
class="com.upload.one.UploadImageAction" >
      
 
            <!--
限制图片的格式和图片的大小 -->
          
 <interceptor-ref name="fileUpload">
  
             <param
name="allowedTypes">
          
       
 image/bmp,image/png,image/gif,image/jpeg,image/jpg
  
           
 </param>
          
     <param
name="maximumSize">102400</param>
      
     </interceptor-ref>
  
         
      
     <!-- 默认的拦截器,必须要写 -->
  
         <interceptor-ref
name="defaultStack" />
          
 
            <result
name="success">/showImage.jsp</result>
  
         <result
name="input">/upload_image.jsp</result>
  
     </action>
  
 </package>

<constant
name="struts.multipart.saveDir"
value="d:/test"></constant>
</struts>

解析:
  
 A、因为在这里我限制了图片的格式和大小,如果不配置国际化资源文件,那么在页面引入<s:fielderror/>
  
    的时候,显示出的内容不友好,于是自己定义出错显示的内容

B、在action配置里面,限制了单张图片的大小<param
name="maximumSize">102400</param>
      
如果不再package外面(<constant name="struts.multipart.maxSize"
value="1024102400"/>)限制总的上传大小
       
    那么,当你上传的单个图片超过限定的大小,没事反应,但是后台会报错

C、<constant name="struts.multipart.saveDir"
value="d:/test"></constant>临时存放文件的路径
      
如果不要这个路径,就会在控制台打印Unable to find ‘struts.multipart.saveDir‘ property setting.
Defaulting to       
javax.servlet.context.tempdir

4、messageResource_zh_CN.properties配置文件的内容
#上传文件类型不允许的提示信息
struts.messages.error.content.type.not.allowed=\u4E0A\u4F20\u7C7B\u578B\u9519\u8BEF

#上传文件太大的提示信息
struts.messages.error.file.too.large=\u4E0A\u4F20\u6587\u4EF6\u592A\u5927

解析:当图片的格式不对,上传大小不对时,就会在页面显示相应的错误信息

5、把上传的图片显示出来
 <body>
  
   <s:iterator value="fileFileName"
status="length">
            
 <img src=‘upload/<s:property
value="fileFileName.get(#length.index)"/>‘>
     
</s:iterator>
  </body>

总结:
1、错误时要一边上网查,也要自己看,比如同一个错误,网上解决的办法很多,并不是每个都适合自己
     
还要花时间去试。要有耐心--我差点就没有耐心  
    
  
 2、把出错记录下来,方便以后查看

struts2上传图片的全过程,布布扣,bubuko.com

时间: 2024-11-10 14:05:33

struts2上传图片的全过程的相关文章

struts2上传图片的全过程 自己版

function toAdd() { if(befoSubmit()) { $.ajax({ cache :  true, type : "POST", url : "<%=basePath%>check/addCheckWineInfoOK", data : $("#addForm").serialize(), error : function(request) { $("#errorMsg").show();

struts2上传图片超过大小给出错误提示

struts2上传图片超过大小给出错误提示 今天碰到上传图片太大,上传不上去返回input视图的界面,回显的错误信息却是乱码,整了好久才整出来,在这里做个记录,方便自己以后查阅,也希望能给遇到这种情况的朋友点指示,呵呵!           首先,在struts.xml里新增的配置,     <!--  指定显示的错误信息的编码格式,注意这个编码应该跟你的回显的页面的格式是一致的  -->     <constant name="struts.i18n.encoding&quo

Java SSH 项目总结——Struts2上传图片组

前言 在一个表单中上传5张图片分别隶属于5类别,在Strust2表单中赋予file控件的name属性一样,实现多张图片与该图片隶属的类别信息进行提交,后台获取上传文件的数组信息,然后将图片和类别信息进行保存,完成图片上传的功能. 正文 前台页面 前台代码 </pre><pre name="code" class="html"><s:form id="fileForm" name="fileForm"

一个简单的struts2上传图片的例子

说到上传图片,最近在赶一个项目,也遇到了要上传头像的难题,在网上搜了好久,都没有找到满意的答案.于是又选择了最原始的上传图片的方法,在此做个记录,谨作备忘之用. 首先是添加页面add_UI.jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <%@include file="/common/heade

struts2——上传图片格式

1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib uri="/struts-tags" prefix="s"%> 4 <!DOCTYPE html> 5 <html> 6 <head> 7 &l

struts2上传图片

在WEB-INF下新建一个content目录,建立一个upload.jsp 1 <%@ page contentType="text/html; charset=UTF-8" language="java" errorPage="" %> 2 <%@taglib prefix="s" uri="/struts-tags"%> 3 <!DOCTYPE html PUBLIC &q

Struts2上传图片后缀名变为.tmp

问题描述:在post请求时,图片以File的格式传入后台,保存时变成.tmp格式文件. 解决方案: private File UserFile; private String UserFileFileName; private String UserFileContentType; public String getUserFileFileName() { return UserFileFileName; } public void setUserFileFileName(String user

android 上传图片到服务器Tomcat(Struts2)

在做android开发的时候,有时你会用到图片的上传功能,在我的android项目中,我是选中图片,点击上传多张图片 android客户端上传图片部分的代码如下: package com.example.myphotos.utils; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.Inp

关于ajaxfileupload.js上传图片使用历程(struts2)

因为要使用上传图片功能,附加图片的描述信息, 而传统的<s: file/>由于一些限制在这个小模块中无法使用, 于是搜到了使用ajaxfileupload.js插件进行上传的方法,在使用过程中,jsp,js,struts2 因为自己不熟悉ajax的情况出了许多的小问题,在这里记录一下, 方便自己查看,也希望能帮到他人, 首先说一下思路,通过点击上传直接触发js 的function 调用后台把图片拷贝到指定服务器目录,返回保存的路径到前台,然后跟随图片描述信息一起用ajax异步传到后台.(PS: