使用ajaxFileUpload+struts2的上传功能

用struts2做了一个上传的功能

下面是action里面的代码

package cn.com.simb.webmodule;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;

import java.util.Date;

import org.apache.log4j.Logger;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import cn.com.platform.framework.utils.DateUtility;
import cn.com.platform.framework.utils.SystemTools;
import cn.com.simb.common.Constants;
import cn.com.simb.model.Customer;

import com.opensymphony.xwork2.ActionSupport;

@Scope("prototype")
@Controller
public class UploadAction  extends ActionSupport {
		
	private static final long serialVersionUID = 1L;
	
	static Logger logger = Logger.getLogger(UploadAction.class.getName());
	
	public String result = "";
	
	public String type = "";
	
	public String getType() {
		return type;
	}

	public void setType(String type) {
		this.type = type;
	}
	//上传的文件
	private File upload; 
	// 上传文件名  
    private String uploadFileName;
    private Customer customer;
	/**
	 * 上传图片
	 * @return
	 */
    
	public String uploadFile(){
		this.result = "";
		//判断是否上传正确
		if(this.upload == null || this.uploadFileName == null){
			this.result = "2";
			return SUCCESS;
		}
		FileInputStream in = null;
		FileOutputStream out = null;
		try{
			String fileType = uploadFileName.substring(uploadFileName.lastIndexOf("."),uploadFileName.length());
			String srcFileName = uploadFileName.substring(0,uploadFileName.lastIndexOf("."));
			StringBuffer fileNameBuffer = new StringBuffer();
			fileNameBuffer.append(SystemTools.getWebRoot());
			fileNameBuffer.append(Constants.FILE_PATH );
			String fileName =srcFileName +"-"+ DateUtility.dateToString(new Date(),DateUtility.DATE_PATTERN_YYYYMMDDHMS);
			fileNameBuffer.append(fileName);
			fileNameBuffer.append(fileType);
			in = new FileInputStream(upload);
			out = new FileOutputStream(new File(fileNameBuffer.toString()));
			int b;
			byte[] buffer = new byte[1024];
		    while (true) {
		        if (in.available() < 1024) {
		            while ((b = in.read()) != -1) {
		            	out.write(b);
		            }
		            break;
		        } else {
		        	in.read(buffer);
		        	out.write(buffer);
		        }
		    }
		    this.result = fileName + fileType;
		}catch(Exception e){
			e.printStackTrace();
			logger.error(e.getMessage());
		}finally{
			try{
				if(in != null) in.close();
				if(out != null) out.close();
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		return SUCCESS;
	}

然后是js的:

<script src="../framework/js/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="../framework/js/ajaxfileupload.js" type="text/javascript"></script>
<script type="text/javascript">
function Upload() {
            $j.ajaxFileUpload
            ({
                   url: top.Client.CONST_PATH + "/simb/uploadFile.action", //用于文件上传的服务器端请求地址
                   type: 'post',
                   secureuri: false, //一般设置为false
                   fileElementId: 'upload', //文件上传空间的id属性  
                   dataType: 'json', //返回值类型 一般设置为json
                   success: function (data, status)  //服务器成功响应处理函数
                   {
                       $("#img").attr("src", "img/"+data);
                       if (typeof (data.error) != 'undefined') {
                           if (data.error != '') {
                               alert(data.error);
                           } else {
                               alert(data.msg);
                           }
                       }
                   },
                   error: function (data, status, e)//服务器响应失败处理函数
                   {
                       alert(e);
                   }
            });
        }
</script>
<input type="file" id="upload" name="upload"/>
<br />
<input type="button" value="上传" onclick="return Upload();"/>
<img id="img" src=""/>

要说一下的就是:

1、要使用ajaxFileUpload必须要导入两个js包,jquery跟ajaxFileUpload,而且顺序不能反。我这里的代码因为有其他包也用了$符号,跟jquery会冲突,所以我把jquery的符号改成了$j

2、file控件的id一定要跟action里file类型的参数对应,名字不一样的话不能接收到数据

3、ajaxFileUpload的返回参数,dataType的类型,一开始我写的是text,打印出来是没问题,但是到了src里就会自己多了双引号,害我查了好长一段时间,最后发现用json就没事了



你可能感兴趣的:(使用ajaxFileUpload+struts2的上传功能)