精华内容
下载资源
问答
  • 网页请求编码分析 响应编码 url请求乱码 post请求 get请求 ...网页请求编码分析pageEncoding值得是jsp文件本身的保存编码格式; charset=utf-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3

    网页请求编码分析

    pageEncoding值得是jsp文件本身的保存编码格式

    <%@ page language="java" contentType="text/html; charset=utf-8"
             pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UFT-8">
        <title>encoding</title>
    </head>
    <body></body></html>

    页面编码:由page指令中的pageEncoding和charset决定,前者优先权高,两者都不写则是 ISO-8859-1

    响应编码

    响应的编码根本上是由ServletResponse对象的characterEncoding属性决定的。
    具体一次取决于page指令的contentType中的charset,然后是pageEncoding。大体和上面是反的

    如果只设置page指令的contentType,容易保证了页面编码和响应编码的统一
    1. page指令的contentType影响的是HTTP响应头Content-Type。而元素中的Content-Type则只是一段文本内容,只有当HTTP响应头中没有Content-Type时浏览器才会检测这段文本。
    2. 在现在的浏览器中,GET和POST请求数据的编码只受HTML元素的Content-Type影响。为了保持统一,很多网站的做法是把URL里面的中文和特殊字符用JavaScript的URL encode。
    3. 任何请求都需要先经过服务器处理,先由服务器读取URL才知道该传给什么Servlet。POST和GET的URL,都受服务器配置URIEncoding的影响,但是POST在通过URL读取成功之后,它的数据不在URL中,所以设置ServletRequest的characterEncoding才能正确读取。

    url请求乱码

    post请求

    这个今天上传图片的时候遇到中文名字乱码的问题,研究了一下。对于post请求,我们可以
    1. 使用request.setCharacterEncoding方法来处理

     依赖于web服务器来处理的,并不是所有的web服务器都是支持的

    get请求

    get请求不能使用request.setCharacterEncoding,因此可以
    1. *String name = new Strring(request.getParater(“name”).getBytes(“ISO-8859-1”),”GBK”)

    依赖于java处理的

    1. 可以在conf/server.xml中配置URIEncoding=”UTF-8” 编码来处理

      tomcat默认使用ISO-8859-1编码,因此一个通用有效的方法就是设置web服务器的server.xml文件添加URIEncoding=”UTF-8”配置

    参考资料

    jsp编码全解
    中文编码

    展开全文
  • jsp上传图片+电子相册

    2011-01-03 15:15:27
    jsp图片上传文件名存入数据库做成的电子相册。需要在阿帕奇上下包,文件里已有。使用前看使用说明。
  • <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> ...%--文件上传: 1、表单类型为 enctype="multipart/form-data 2、表单提交方式为post .

           创建一个文件上传表单:
           1、表单类型为 enctype="multipart/form-data
           2、表单提交方式为post
           3、表单元素要有name属性值

    index.jsp 

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
      <head>
        <title>$Title$</title>
      </head>
      <body>
     <form action="upload" method="post" enctype="multipart/form-data">
      <input type="file" name="file1">
      <input type="file" name="file2">
      <input type="submit">
    </form>
      </body>
    </html>
    

    编写后台 Servlet ,在这之前我们先确保依赖包已经引入到项目的 WEB-INF/lib 目录下,

    你可以去下载依赖包:jsmartcom_zh_CN.jar

    UploadServlet代码(此以上传多个文件为例)

    //设置进行访问的servlet文件名,form表单action属性即可设置为在后端服务器上处理文件上传的 Servlet 名文件
    @WebServlet("/upload") 
    
    public class FileUpload extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doPost(req,resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            //创建文件对象
            SmartUpload up=new SmartUpload();
    
            //初始化文件(将文件保管到文件对象中)
            up.initialize(getServletConfig(),req,resp);
    
            try {
    
                //获取上传文件
                up.upload();
    
             // 上传配置
                up.setAllowedFilesList("jpg,png,gif,jpeg"); //限定上传格式,这里是设置了图片格式
                up.setMaxFileSize(1024);
                up.setTotalMaxFileSize(1024*10);
                
                //找到文件要上传存储的路径
                String path=getServletContext().getRealPath("/img");
             
                //取出要上传的所有文件
                Files files = up.getFiles();
                for (int i = 0; i < files.getCount(); i++) {
                    com.jspsmart.upload.File file = files.getFile(i);//取出要上传的每一个文件
    
                   /* 直接解决文件名的乱码问题(不推荐)*/
                  String fileName = file.getFileName(); //获取到取出的每个上传文件原来的文件名
                  fileName = new String(fileName.getBytes(),"UTF-8");//对所获取的文件名设置字符编码UTF-8
    
                   //上传文件到指定路径
                    file.saveAs(path+"\\"+fileName);
                }
                //重定向到表单页面上
                resp.sendRedirect("index.jsp");
            } catch (SmartUploadException e) {
                e.printStackTrace();
            }
    
        }
    }
         

    上面上传文件代码中是直接进行解决文件名乱码,但是一般推荐的是由系统统一重新分配唯一的文件名, 操作如下:

    getFileExt()-->获取文件后缀名

       String fileName = UUID.randomUUID().toString()+"."+file.getFileExt();


                 

    展开全文
  • 之前做过一个项目,有一个功能是图片上传并且展示图片,尝试过其他的方法,但会有一个问题,那就是在IE8上图片并不能正常展示,所以便用以下方法来上传图片,很好的解决了此问题,步骤如下: 1.上传图片页面index....

    之前做过一个项目,有一个功能是图片上传并且展示图片,尝试过其他的方法,但会有一个问题,那就是在IE8上图片并不能正常展示,所以便用以下方法来上传图片,很好的解决了此问题,步骤如下:

    1.上传图片页面index.jsp

     

    <%@ page language="java" import="java.util.*,java.net.URLDecoder" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        
        <title>My JSP 'index.jsp' starting page</title>
    	<meta http-equiv="pragma" content="no-cache">
    	<meta http-equiv="cache-control" content="no-cache">
    	<meta http-equiv="expires" content="0">    
    	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    	<meta http-equiv="description" content="This is my page">
    	<script  type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
    	<script  type="text/javascript" src="js/ajaxupload.js"></script>
    	<!--
    	<link rel="stylesheet" type="text/css" href="styles.css">
    	-->
      </head>
      
      
      <body>
      <script type="text/javascript">
        $(function(){
    	//上传图片
    	new AjaxUpload('#addLabProdPic', {
    		action: 'upload.jsp', 
    		name: 'picFile',
    		responseType: 'json',
    		onSubmit : function(file , ext){
    			if (ext && /^(jpg|png|bmp)$/.test(ext.toLowerCase())){
    				this.setData({
    					'picName': file
    				});
    			} else {
    				alert("请上传格式为 jpg|png|bmp 的图片!");
    				return false;				
    			}
    		},
    		onComplete : function(file,response){
    			if(response.error) {
    				alert(response.error);
    				return;
    			}
    			//alert(response.picUrl);
    			show(response.picUrl);
    		}		
    	});
    })
      
      function show(path){
    	 
       if(document.all)//IE
       {
       //path = "D:/upload/11.png";
       document.getElementById("imgPreview").innerHTML="";
       document.getElementById("imgPreview").style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=\"" + path + "\")";//使用滤镜效果www.2cto.com  
       }
       else//FF
       {
       //path = "D:/upload/11.png";
       //document.getElementById("imgPreview").innerHTML = "<img id='img1' width='120px' height='100px' src='"+path+"'/>";
        document.getElementById("img1").src = path;
        }  
       };
      </script>
        <h1>Ajax文件上传例子,选择图片后立即上传,无需点击上传按钮</h1>
    	<button id="addLabProdPic">选择图片</button>
    	<br>
    	<div id="imgPreview" style='width:120px; height:100px;'>
    	 <img id="viewImg"  width="200px" height="200px;">
    	 </div>
      </body>
    </html>
    


    2.上传图片后台处理业务upload.jsp

     

     

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%@page import="java.io.PrintWriter,java.io.File,org.apache.commons.fileupload.FileItem,org.apache.commons.fileupload.disk.DiskFileItemFactory,org.apache.commons.fileupload.servlet.ServletFileUpload" %>
    <%
    
    System.out.println("///");
    // dfif对象为解析器提供解析时的缺省的一些配置
    	DiskFileItemFactory dfif = new DiskFileItemFactory();
    // 创建解析器
    	ServletFileUpload sfu = new ServletFileUpload(dfif);
    sfu.setHeaderEncoding("utf-8");//解决了上传图片如果为中文就是乱码问题
    String loadpath="D:/upload";//上传文件存放目录(此路径是将上传的文件放在本地的硬盘上)
    String filName="";
    try{
    	// 开始解析(分析InputStream)
    	// 每一个表单域当中的数据都会
    	// 封装到一个对应的FileItem对象上。
    	List<FileItem> items = sfu.parseRequest(request);
    	for (int i = 0; i < items.size(); i++) {
    		FileItem item = items.get(i);
    		// 要区分是上传文件域还是普通的表单域
    		if (item.isFormField()) {
    					// 普通表单域
    					String name = item.getString();
    					filName=name;
    					System.out.println("name:" + name);
    				} else {
    					// 上传文件域
    
    					// ServletContext:servlet上下文对象。
    					ServletContext sctx = getServletContext();
    					// 获得原始的文件名
    					String filename = item.getName();
    			File loadFolder = new File(loadpath);
    			if (!loadFolder.exists()) {
    				loadFolder.mkdirs();
    			}
    					File file = new File(loadFolder + "\\" + filename);
    					item.write(file);
    				}
    	}
    	String result=loadpath+"/"+filName;
    	PrintWriter writer = response.getWriter();
    	
    	writer.print("{");
    	//writer.print("msg:\"文件大小:"+item.getSize()+",文件名:"+filename+"\"");
    	writer.print("picUrl:\"" + result + "\"");
    	writer.print("}");
    	
    	writer.close();
    }catch(Exception e){
    	e.printStackTrace();
    }
    %>
    

     

     

    3.所需主要文件ajaxupload.js

     

     

    展开全文
  • jsp图片上传

    千次阅读 2012-06-07 00:03:31
    //图片上传路径   String tempPath = request.getSession().getServletContext().getRealPath("/")+"upload/temp/";//图片临时上传路径   String imagePath=request.getScheme()+"://"+request....

    1.开发环境:

     1)eclipse3.2+tomcat5.5;

     2)创建dynamic web project;

     3)下载:

    Commons FileUpload 可以在http://jakarta.apache.org/commons/fileupload/下载

    附加的Commons IO  可以在http://jakarta.apache.org/commons/io/下载

    将commons-fileupload-1.2.1.jar commons-io-1.4.jar拷贝到WebContent/WEB-INF//lib目录;

     

     

    2.前台:

    <form method="post" enctype="multipart/form-data" action="upload.jsp" target="_blank">
    <%-- 类型enctype用multipart/form-data,这样可以把文件中的数据作为流式数据上传,不管是什么文件类型,均可上传--%>
    <table>
    <tr><td>作品:<input type="file" name="upfile" size="50"></td></tr>
    <tr><td>作者:<input type="text" name="author" size="22">
            标题:<input type="text" name="title" size="22">
            <input type="submit" name="submit" value="上 传"></td></tr>
    <tr><td>备注:上传的jpg图片(显示扩展名为.jpg)大小不能超过4M!</td></tr>
    </table>
    </form>

    3.后台:

    1)引用:

    <%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
    <%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
    <%@ page import="org.apache.commons.fileupload.*"%>

    2)代码:

    String id=null;//上传记录id
     String destinationfileName=null;//目标文件名
     String author=null;
     String title=null;
     int flag=0;//上传标志

        String uploadPath =request.getSession().getServletContext().getRealPath("/")+"upload/";//图片上传路径  
        String tempPath = request.getSession().getServletContext().getRealPath("/")+"upload/temp/";//图片临时上传路径   
        String imagePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/"; //   图片网络相对路径 
        if(!new File(uploadPath).isDirectory()) new File(uploadPath).mkdirs();//   文件夹不存在就自动创建:
        if(!new File(tempPath).isDirectory())new File(tempPath).mkdirs(); 
        try {
         DiskFileUpload fu = new DiskFileUpload(); 
         fu.setSizeMax(4194304);//   设置最大文件尺寸,这里是4MB   
          fu.setSizeThreshold(4096);//   设置缓冲区大小,这里是4kb 
         fu.setRepositoryPath(tempPath);//   设置临时目录: 
          List fileItems = fu.parseRequest(request);//   得到所有的文件:
            Iterator i = fileItems.iterator();  
         while(i.hasNext()) {//   依次处理表单中每个域
                FileItem file = (FileItem)i.next();//   获得用户上传时文件名 
       if (file.isFormField()){  //获得文本域表单数据      
        if("author".equals(file.getFieldName())) author=codeToString(file.getString());
        if("title".equals(file.getFieldName())) title=codeToString(file.getString());
        continue;//非file域不处理
              }   
       String sourcefileName = file.getName();
          if( sourcefileName.endsWith(".jpg")){//生成上传后的文件名    
          Random rd = new Random();
          Calendar time = Calendar.getInstance();
          id=String.valueOf(time.get(Calendar.YEAR))
               + String.valueOf(time.get(Calendar.MONTH)+1)
                + String.valueOf(time.get(Calendar.DAY_OF_MONTH))
                + String.valueOf(time.get(Calendar.HOUR_OF_DAY))
                + String.valueOf(time.get(Calendar.MINUTE))
                                     + String.valueOf(time.get(Calendar.SECOND))
                                     + String.valueOf(rd.nextInt(100));
          destinationfileName=id+".jpg";
                   File fTmp=new File(uploadPath+destinationfileName);
                   file.write(fTmp);
                   //out.print("<img src="+imagePath+"upload/"+destinationfileName+">");
          flag=1;//上传成功标志1
               }else{out.print("上传失败,只能上传jpg文件!"); }
           }
           //out.print("<script>location.href=/"demo.jsp/";</script>");
        }catch (IOException e) {out.print("上传失败!");}
        out.flush();
        out.close();

     

    4.主要解决点:

    1)问题:form设置enctype="multipart/form-data",request.getParameters函数无法获取表单域值;
        2)解决方案:

    if (file.isFormField()){  //获得文本域表单数据      
             if("author".equals(file.getFieldName())) author=codeToString(file.getString());
            if("title".equals(file.getFieldName())) title=codeToString(file.getString());
        continue;//非file域不处理
            }  

















    前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问题。

    实现原理

    Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。

    具体实现

    前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:

    依赖类包的列表 
    清单1 依赖类包的列表

    首先,创建文件上传页面FileUpload.jsp,内容如下:

    <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
    <% @ taglib prefix = " s " uri = " /struts-tags " %>

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    < html xmlns ="http://www.w3.org/1999/xhtml" >
    < head >
       
    < title > Struts 2 File Upload </ title >
    </ head >
    < body >
       
    < s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" >
           
    < s:file name ="myFile" label ="Image File" />
           
    < s:textfield name ="caption" label ="Caption" />        
           
    < s:submit />
       
    </ s:form >
    </ body >
    </ html >
    清单2 FileUpload.jsp

    在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。

    其次是FileUploadAction.java代码:

    package tutorial;

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.util.Date;

    import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.ActionSupport;

    public class FileUploadAction extends ActionSupport {
       
    privatestaticfinallong serialVersionUID = 572146812454l;
       
    privatestaticfinalint BUFFER_SIZE = 16*1024;
       
       
    private File myFile;
       
    private String contentType;
       
    private String fileName;
       
    private String imageFileName;
       
    private String caption;
       
       
    publicvoid setMyFileContentType(String contentType) {
           
    this.contentType = contentType;
       }

       
       
    publicvoid setMyFileFileName(String fileName) {
           
    this.fileName = fileName;
       }

           
       
    publicvoid setMyFile(File myFile) {
           
    this.myFile = myFile;
       }

       
       
    public String getImageFileName() {
           
    return imageFileName;
       }

       
       
    public String getCaption() {
           
    return caption;
       }


       
    publicvoid setCaption(String caption) {
           
    this.caption = caption;
       }

       
       
    privatestaticvoid copy(File src, File dst) {
           
    try{
               InputStream in
    =null;
               OutputStream out
    =null;
               
    try{                
                   in
    =new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE);
                   out
    =new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE);
                   
    byte[] buffer =newbyte[BUFFER_SIZE];
                   
    while(in.read(buffer) >0) {
                       out.write(buffer);
                   }

               }
    finally{
                   
    if(null!= in) {
                       in.close();
                   }

                   
    if(null!= out) {
                       out.close();
                   }

               }

           }
    catch(Exception e){
               e.printStackTrace();
           }

       }

       
       
    privatestatic String getExtention(String fileName) {
           
    int pos = fileName.lastIndexOf(".");
           
    return fileName.substring(pos);
       }


       @Override
       
    public String execute()    {        
           imageFileName
    =new Date().getTime() + getExtention(fileName);
           File imageFile
    =new File(ServletActionContext.getServletContext().getRealPath("/UploadImages") +"/"+ imageFileName);
           copy(myFile, imageFile);
           
    return SUCCESS;
       }

       
    }
    清单3 tutorial/FileUploadAction.java

    在FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<s:file/>和<s:textfield/>标志。但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。

    FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的UploadImages文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。

    下面我们就来看看上传成功的页面:

    <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
    <% @ taglib prefix = " s " uri = " /struts-tags " %>

    <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
    < html xmlns ="http://www.w3.org/1999/xhtml" >
    < head >
       
    < title > Struts 2 File Upload </ title >
    </ head >
    < body >
       
    < div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" >
           
    < img src ='UploadImages/<s:property value ="imageFileName" /> ' />
           
    < br />
           
    < s:property value ="caption" />
       
    </ div >
    </ body >
    </ html >
    清单4 ShowUpload.jsp

    ShowUpload.jsp获得imageFileName,将其UploadImages组成URL,从而将上传的图像显示出来。

    然后是Action的配置文件:

    <? xml version="1.0" encoding="UTF-8" ?>

    <! DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd"
    >

    < struts >
       
    < package name ="fileUploadDemo" extends ="struts-default" >
           
    < action name ="fileUpload" class ="tutorial.FileUploadAction" >
               
    < interceptor-ref name ="fileUploadStack" />
               
    < result name ="success" > /ShowUpload.jsp </ result >
           
    </ action >
       
    </ package >
    </ struts >
    清单5 struts.xml

    fileUpload Action显式地应用fileUploadStack的拦截器。

    最后是web.xml配置文件:

    <? xml version="1.0" encoding="UTF-8" ?>
    < web-app id ="WebApp_9" version ="2.4"
        xmlns
    ="http://java.sun.com/xml/ns/j2ee"
        xmlns:xsi
    ="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation
    ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" >

       
    < display-name > Struts 2 Fileupload </ display-name >

       
    < filter >
           
    < filter-name > struts-cleanup </ filter-name >
           
    < filter-class >
                org.apache.struts2.dispatcher.ActionContextCleanUp
           
    </ filter-class >
       
    </ filter >
        
       
    < filter >
           
    < filter-name > struts2 </ filter-name >
           
    < filter-class >
                org.apache.struts2.dispatcher.FilterDispatcher
           
    </ filter-class >
       
    </ filter >
        
       
    < filter-mapping >
           
    < filter-name > struts-cleanup </ filter-name >
           
    < url-pattern > /* </ url-pattern >
       
    </ filter-mapping >

       
    < filter-mapping >
           
    < filter-name > struts2 </ filter-name >
           
    < url-pattern > /* </ url-pattern >
       
    </ filter-mapping >

       
    < welcome-file-list >
           
    < welcome-file > index.html </ welcome-file >
       
    </ welcome-file-list >

    </ web-app >
    清单6 WEB-INF/web.xml

    发布运行应用程序,在浏览器地址栏中键入:http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出现图示页面:


    清单7 FileUpload页面

    选择图片文件,填写Caption并按下Submit按钮提交,出现图示页面:


    清单8 上传成功页面

    更多配置

    在运行上述例子,如果您留心一点的话,应该会发现服务器控制台有如下输出:

    Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.dispatcher.Dispatcher getSaveDir
    INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
    Mar
    20 , 2007 4 : 08 : 43 PM org.apache.struts2.interceptor.FileUploadInterceptor intercept
    INFO: Removing file myFile C:\Program Files\Tomcat
    5.5 \work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355841__7ff7_00000006.tmp
    清单9 服务器控制台输出

    上述信息告诉我们,struts.multipart.saveDir没有配置。struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件中。例如,如果在struts.properties文件加入如下代码:

    struts.multipart.saveDir = /tmp
    清单10 struts配置

    这样上传的文件就会临时保存到你根目录下的tmp文件夹中(一般为c:\tmp),如果此文件夹不存在,Struts 2会自动创建一个。

    错误处理

    上述例子实现的图片上传的功能,所以应该阻止用户上传非图片类型的文件。在Struts 2中如何实现这点呢?其实这也很简单,对上述例子作如下修改即可。

    首先修改FileUpload.jsp,在<body>与<s:form>之间加入“<s:fielderror />”,用于在页面上输出错误信息。

    然后修改struts.xml文件,将Action fileUpload的定义改为如下所示:

            < action name ="fileUpload" class ="tutorial.FileUploadAction" >
               
    < interceptor-ref name ="fileUpload" >
                   
    < param name ="allowedTypes" >
                        image/bmp,image/png,image/gif,image/jpeg
                   
    </ param >
               
    </ interceptor-ref >
               
    < interceptor-ref name ="defaultStack" />            
               
    < result name ="input" > /FileUpload.jsp </ result >
               
    < result name ="success" > /ShowUpload.jsp </ result >
           
    </ action >
    清单11 修改后的配置文件

    显而易见,起作用就是fileUpload拦截器的allowTypes参数。另外,配置还引入defaultStack它会帮我们添加验证等功能,所以在出错之后会跳转到名称为“input”的结果,也即是FileUpload.jsp。

    发布运行应用程序,出错时,页面如下图所示:


    清单12 出错提示页面

    上面的出错提示是Struts 2默认的,大多数情况下,我们都需要自定义和国际化这些信息。通过在全局的国际资源文件中加入“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image”,可以实现以上提及的需求。对此有疑问的朋友可以参考我之前的文章《在Struts 2.0中国际化(i18n)您的应用程序》。

    实现之后的出错页面如下图所示:


    清单13 自定义出错提示页面

    同样的做法,你可以使用参数“maximumSize”来限制上传文件的大小,它对应的字符资源名为:“struts.messages.error.file.too.large”。

    字符资源“struts.messages.error.uploading”用提示一般的上传出错信息。

    多文件上传

    与单文件上传相似,Struts 2实现多文件上传也很简单。你可以将多个<s:file />绑定Action的数组或列表。如下例所示。

    < s:form action ="doMultipleUploadUsingList" method ="POST" enctype ="multipart/form-data" >
       
    < s:file label ="File (1)" name ="upload" />
       
    < s:file label ="File (2)" name ="upload" />
       
    < s:file label ="FIle (3)" name ="upload" />
       
    < s:submit />
    </ s:form >
    清单14 多文件上传JSP代码片段

    如果你希望绑定到数组,Action的代码应类似:

        private File[] uploads;
       
    private String[] uploadFileNames;
       
    private String[] uploadContentTypes;

       
    public File[] getUpload() { returnthis.uploads; }
       
    public void setUpload(File[] upload) { this.uploads = upload; }

       
    public String[] getUploadFileName() { returnthis.uploadFileNames; }
       
    public void setUploadFileName(String[] uploadFileName) { this.uploadFileNames = uploadFileName; }

       
    public String[] getUploadContentType() { returnthis.uploadContentTypes; }
       
    public void setUploadContentType(String[] uploadContentType) { this.uploadContentTypes = uploadContentType; }
    清单15 多文件上传数组绑定Action代码片段

    如果你想绑定到列表,则应类似:

        private List < File > uploads = new ArrayList < File > ();
       
    private List < String > uploadFileNames = new ArrayList < String > ();
       
    private List < String > uploadContentTypes = new ArrayList < String > ();

       
    public List < File > getUpload() {
           
    returnthis.uploads;
       }

       
    public void setUpload(List < File > uploads) {
           
    this.uploads = uploads;
       }


       
    public List < String > getUploadFileName() {
           
    returnthis.uploadFileNames;
       }

       
    public void setUploadFileName(List < String > uploadFileNames) {
           
    this.uploadFileNames = uploadFileNames;
       }


       
    public List < String > getUploadContentType() {
           
    returnthis.uploadContentTypes;
       }

       
    public void setUploadContentType(List < String > contentTypes) {
           
    this.uploadContentTypes = contentTypes;
       }
    清单16 多文件上传列表绑定Action代码片段

    总结

    在Struts 2中实现文件上传的确是轻而易举,您要做的只是使用<s:file />与Action的属性绑定。这又一次有力地证明了Struts 2的简单易用。


    展开全文
  • java jsp页面上传图片

    千次阅读 2018-04-18 18:16:53
    简单java jsp页面上传图片 实现以下表单提交: jsp页面代码 form 表单提交内容,需要设置编码格式为 enctype=”multipart/form-data” ,是将文件以二进制的形式上传,可以实现多种类型的文件上传 &lt;...
  • jsp 图片文件上传

    2019-10-31 22:50:42
    下载架包:commons-fileupload mvn地址 apache: commons-fileupload.jar组件 commons-fileupload.jar依赖commons-io.jar...-------------------------------------------图片上传功能-----------------------------...
  • jsp上传图片

    2014-03-12 11:40:46
    jspsmartupload.jar 可以处理下载时中文乱码问题。把压缩包里面的jar拷贝到工程的lib下面即可 主要方法介绍 上传 // 新建一个SmartUpload对象 SmartUpload su = new SmartUpload(); // 上传初始化 su....
  • jsp图片上传代码

    千次阅读 2011-10-31 11:21:33
    ;charset=UTF-8" language="java" import="java.io.*,java.awt.Image,java.awt.image.*,com.sun.image.codec.jpeg.*, java.sql.*,com.jspsmart.upload.*,java.util.*,cn.oof.databas
  • 要实现前台的图片显示,通过后台上传有如下一个步骤:1.复制一个cos.jar开发包到web-inf的lib下;2.写一个工具类(如下代码)package com.util; import java.io.File; import java.io.IOException; import java.util....
  • 1.文件上传 直接复制项目了,你们有需要的自己看着改吧 表单部分截图 (添加分类按钮可忽略) jsp页面html部分 文档分类 :  ${docTypeName} 文档...
  • jspsmart上传图片到Tomcat

    千次阅读 热门讨论 2015-09-26 21:07:53
    最近做的一个项目中,用到了jspsmartUpload的jar包,将图片上传到Tomcat上面,我本人也是在学习阶段,跟大家分享一下。 我们下载一个jspSmart.zip,解压后将jspsmart.jar导入到myclipse中,这里我们也可以直接...
  • jsp图片上传到数据库,并且实现取出来

    万次阅读 多人点赞 2018-03-17 19:47:17
    说明:基于jsp与servlet、mysql对的图片上传与操作,servlet用于操作文件的上传。实现上传需要包文件:commons-fileupload-1.3.2、commons-io-2.5.jar、mysql-connector-java5.1.26-bin.jar(数据库驱动,自行下载)...
  • 前些天做一个新闻发布和修改的功能,通过javascript实现点击图片文件名预览图片,点击按钮将文件名变换为file文件选择,以此方法来实现修改图片功能,这里对这个工作做一个总结,希望对需要的孩纸有所帮助,也希望...
  • jsp上传图片并生成缩略图 需要jspSmartUpload.jar upload.jsp 请选择上传图片 <!-- --> 请选择上传图片 uploadimage.jsp ...
  • servlet 里用ServletInputStream接收, request.setCharacterEncoding("UTF-8"); ServletInputStream sin = request.getInputStream(); PrintWriter out=response.getWriter();... while ((length = sin....
  • 定义接收的源页面,可以将该图片上传工具类独立抽象出来放入include文件夹中。 SmartUpload mySmartUpload = new SmartUpload(); long file_size_max = 4000000 ; String fileName2 = "", ext = "", ...
  • 在Servlet中将图片保存在本地文件夹中(如果保存在工程下,上传完成后需要重启服务器才能显示图片) 返回上传界面,如果需要图片名,在Servlet中将图片名放在Session中,然后在上传界面取名可以存在数据库中。 效果...
  • jsp上传图片到数据库(oracle),并能在页面上显示解决办法jsp上传图片到数据库(oracle),并能在页面上显示解决办法日期:2014-05-18 浏览次数:20341 次jsp上传图片到数据库(oracle),并能在页面上显示在jsp里面 时的...
  • 最近写web大作业,自拟的题目是招聘网站的开发,没有用框架写,写完有空记录一下图片上传的实现(毕竟本人菜鸡之前试图写这个功能但总是没法实现),代码参考的是这位大佬的:... 直接上代码:UploadpicsServlet.java ...
  • jsp上传图片

    2010-11-20 15:02:00
    有关FileUpload组件的使用和调试的经验:在通过使用FileUpload组件上传的过程中,通过自己的调试,总结如下:1)使用之前的准备,我用的是...动网, 上传图片后加给加上自己的字(是在图片上加的) 请问在JSP里如何实
  • js图片预览,上传,前端修改文件名

    千次阅读 2018-04-18 15:05:27
    //以下是上传图片的方法 reader.onloadend = function() {  // 这个事件在读取结束后,无论成功或者失败都会触发  if (reader.error) {  console.log(reader.error);  } else {  document.getElementById(...
  • jspSmartUpload上传图片的路径问题

    千次阅读 2016-04-09 11:48:07
    若FileUpDown应用下存在“file”子目录,则将上传的文件以“myfile.txt”为文件名进行保存,实际的保存路径如下: E:\Tomcat 5.5\webapps\FileUpDown\file\myfile.txt 若不存在“file”子目录,则抛出下面的...
  • 最近在做ca签名,key验证通过后传图片为base64格式图片,保存至自己服务器 (大概操作) 首先获取的src=“data:image/png;base64,sealBase64(获取到的参数)” function qr(){ var base64= $('#image').attr('src')...
  • 这是选择完的,会生成一个blob本地链接来渲染图片 提交前 提交后 这边注意一下,就是webapp里面的项目会跟本地项目里面文件夹同步,也就是说本地文件夹没有的,它等会同步的时候就会消失。 所以我上传的时候在...
  • 之前,写过一个Download.jsp文件,可以解决下载文件乱码问题(诸如:DOC,XSL文件等等). ...现在,把一整套的文件上传下载的方法给贴出来~~~以便大家借鉴!~!~!~!~!  作者:古埃及法老 download.jsp文件 -----------

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,503
精华内容 5,001
关键字:

jsp图片上传文件名