zoukankan      html  css  js  c++  java
  • 工作笔记4.struts2上传文件到server


    本文介绍两种:上传文件到server的方式

      一种是提交Form表单;还有一种是ajaxfileupload异步上传。


    一、JSP中:

        1、提交Form表单

        为了能完毕文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data。

    		<form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="multipart/form-data">
    			文件标题:<input type="text" name="title" /><br>
    			选择文件:<input type="file" name="upload" /><br>
    			<input value="上传" type="submit" />
    		</form>


        2、ajaxfileupload异步上传

          <script src="${pageContext.request.contextPath}/script/jquery.js" type="text/javascript"></script>
          <script src="${pageContext.request.contextPath}/script/ajaxfileupload.js" type="text/javascript"></script><pre name="code" class="javascript">            <script type="text/javascript" language="javascript">
    	//上传附件
    	function uploadFile() {
    		
    		$.ajaxFileUpload( {
    			url : 'tenantCredit_uploadFile.action', //你处理上传文件的服务端
    			type : 'post',
    			secureuri : false,
    			fileElementId : 'fileUpload',
    			dataType : 'text',
    			success : function(data) {
    				if (data == "true") {					
    					alert("上传文件成功!");
    				} else {
    					alert("上传失败!

    " ); } } }) } </script> <input type="file" id="fileUpload" name="upload" value="上传" /> <input type="button" id="btnUploadFile" onclick="javascript:uploadFile();" value="保存记录"/>


    二、Action中该怎样获取文件呢?

      upload属性分别相应前面的表单域的upload属性。用于封装表单域的请求參数。


      Action中包括了两个属性:
         uploadFileName:封装上传文件的文件名称
         uploadContentType:封装上传文件的文件类型。

    Action类直接通过File类型属性直接封装了上传文件的文件内容,但这个File属性无法获取上传文件的文件名称和文件类型,所以Struts2直接将文件域中包括的上传文件名称和文件类型的信息封装到uploadFileName和uploadContentType属性中。


       能够觉得:假设表单中包括一个name属性为xxx的文件域,则相应Action须要使用三个属性来封装该文件域的信息:    

         类型为File的xxx属性封装了该文件域相应的文件内容。(文中的 File upload属性中的upload就是以下两个string的属性的前缀)    
         类型为String的xxxFileName属性封装了该文件域相应的文件的文件名称。
         类型为String的xxxContentType属性封装了该文件域相应的文件的文件名称。


         通过上面的三个属性,能够更简单地实现文件上传,所以能够直接通过调用getXxx()方法来获取上传文件的文件名称、文件类型和文件内容。

    	// 封装上传文件域的属性
    	private File upload;
    	// 封装上传文件类型的属性
    	private String uploadContentType;
    	// 封装上传文件名称的属性
    	private String uploadFileName;	
    	// 标记上传文件的结果:成功/失败
    	private String result;
    		
    	public File getUpload() {
    		return upload;
    	}	
    	public void setUpload(File upload) {
    		this.upload = upload;
    	}	
    	public String getUploadContentType() {
    		return uploadContentType;
    	}
    	public void setUploadContentType(String uploadContentType) {
    		this.uploadContentType = uploadContentType;
    	}
    	public String getUploadFileName() {
    		return uploadFileName;
    	}
    	public void setUploadFileName(String uploadFileName) {
    		this.uploadFileName = uploadFileName;
    	}
    	public String getResult() {
    		return result;
    	}
    	public void setResult(String result) {
    		this.result = result;
    	}
    	
    	// 上传附件
    	public String uploadFile() {
    		try {	
    			String realpath = ServletActionContext.getServletContext().getRealPath("/data");			
    
    			if (upload != null) {
    				File savefile = new File(new File(realpath), uploadFileName);
    				if (!savefile.getParentFile().exists())
    					savefile.getParentFile().mkdirs();
    				FileUtils.copyFile(upload, savefile);
    				ActionContext.getContext().put("message", "文件上传成功");
    			}
    			// 提示:上传成功
    			result = "true";
    			outPrint(response, result);
    			
    		} catch (Exception e) {
    			// 提示:上传失败			
    			String result = "false";
    			outPrint(response, result);
    		}
    		return null;
    	}
    


    三、比較上述两种方式的优缺点:

    1.验证是否选中文件:

      ①提交Form方式:

         缺点:假设未选中文件,用JS捕获后return false,也会提交Form!还须要在Action的方法中进行判定。

      ②Ajax方式:

         若未选中文件,用JS进行判定return false,将不会提交Action

    2.传递參数的方式

      ①提交Form方式-2种:

         利用ModelDriven属性,在Action中直接获取相应控件的value

         或JSP中标识一个id,后在Action中定义此id的get、set方法,就能够直接取到。

      ②Ajax方式-3种:

         同①

         或通过JS中url传參的方式

    3.接收Action中的返回结果

      ①提交Form方式:

         把返回结果放在值栈/Session中,后再JSP中取出。

      ②Ajax方式:

         同①

         或JS回调函数通过data获取Action的返回值。

         或JS回调函数通过data获取Action中outPrint


    综合上述比較。推荐使用Ajax方式上传文件




  • 相关阅读:
    VSS與CSV區別
    办公室中节约时间
    C#中用Smtp發郵件
    关于分层结构的感悟(轉)
    Visual Studio.Net 技巧(轉)
    常用數據庫訪問方式比較
    Winows部署中一些內容說明
    适配器模式(Adapter Pattern)(轉)
    Vistual Studio 2005 sp1補丁的詳細內容
    感情 程序 祭 【转】
  • 原文地址:https://www.cnblogs.com/yfceshi/p/6791501.html
Copyright © 2011-2022 走看看