ajax实现上传文件

 

1.html部分

<input style=" 280px" type="file" name="upLoadProjectPlan" id="upLoadProjectPlan" 
     value="<%=taskAppend.getTaskAllocationDoc()%>"/>

 <a style="float: right;  margin-right: 40px" class="button" href="javascript:void(0)"
  onclick="UpladFile('upLoadProjectPlan', '<%=task.getTaskid() %>')"><span>上传</span></a>

2.js中利用ajax产生表单并发送表单

function UpladFile(fileUploadId, taskid) {

         var fileObj = document.getElementById(fileUploadId).files[0]; // 获取文件对象

         var FileController = "updateWorkAction!fileUpload"; // 接收上传文件的后台处理程序地址 

         // FormData 对象

         var form = new FormData();

         //form.append("author", "hooyes");                        // 可以增加表单数据
         form.append("taskid", taskid);
         form.append("file", fileObj);                           // 文件对象

         // XMLHttpRequest 对象

         var xhr = new XMLHttpRequest();

         xhr.open("post", FileController, true);

         xhr.onload = function () {
             location.reload(true);   
             alert("上传完成!");

         };

         xhr.send(form);
    }

3.Action部分

public class UpdateWorkAction extends ActionSupport{
    private DistributeDao distributeDao;
    private String taskid;
    private List<File>    file; // 上传的文件
    private List<String> fileFileName; // 文件名称
    private List<String> fileContentType; // 文件类型
    
    public DistributeDao getDistributeDao() {
        return distributeDao;
    }

    public void setDistributeDao(DistributeDao distributeDao) {
        this.distributeDao = distributeDao;
    }

    public List<File> getFile() {
        return file;
    }

    public void setFile(List<File> file) {
        this.file = file;
    }

    public List<String> getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(List<String> fileFileName) {
        this.fileFileName = fileFileName;
    }

    public List<String> getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(List<String> fileContentType) {
        this.fileContentType = fileContentType;
    }

    private void init() throws UnsupportedEncodingException{
        ServletActionContext.getRequest().setCharacterEncoding("UTF-8");
        ServletContext context = ServletActionContext.getServletContext();  
    }
    
    public String fileUpload() throws Exception{
        init();
        // 取得需要上传的文件数组
        List<File> files = getFile();
        if (files != null && files.size() > 0) {
            for (int i = 0; i < files.size(); i++) {
                FileOutputStream fos = new FileOutputStream(getSavePath() +
                           "\" + getFileFileName().get(i)); FileInputStream fis = new FileInputStream(files.get(i)); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } fis.close(); fos.close(); } TaskAppend taskAppend = distributeDao.findLeaderMsg(Integer.parseInt(taskid)); taskAppend.setTaskAllocationDoc(getFileFileName().get(0)); distributeDao.updateTaskAppend(taskAppend); } return "fileUpload"; } public String getTaskid() { return taskid; } public void setTaskid(String taskid) { this.taskid = taskid; } }