struts2,fileUpload 注解实现异步上传

Jsp页面:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML>
<html>
  <head>
  <script src="js/jquery.js"></script>
<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<script src="js/jquery.ui.widget.js"></script>
<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<script src="js/jquery.iframe-transport.js"></script>
<!-- The basic File Upload plugin -->
<script src="js/jquery.fileupload.js"></script>
  </head>
 
  <body>
  <input type="file" name="files" multiple id="fileupload_input" />
  </body>
 <script>
$("#fileupload_input").fileupload({
    url:"fileUpload!upload",//文件上传地址,当然也可以直接写在input的data-url属性内
   
    done:function(e,result){
        //done方法就是上传完毕的回调函数,其他回调函数可以自行查看api
        //注意result要和jquery的ajax的data参数区分,这个对象包含了整个请求信息
        //返回的数据在result.result中,假设我们服务器返回了一个json对象
        alert('12');
    }
});
</script>
</html>



web.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns=" http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation=" http://xmlns.jcp.org/xml/ns/javaee
                       http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
  version="3.1"
  metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
     Welcome to Tomcat
  </description>
<filter> 
<filter-name>struts2</filter-name> 
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 
<init-param> 
<param-name>actionPackages</param-name> 
<param-value>com.figo.action</param-value> 
</init-param> 
</filter> 

<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>

struts2.xml 配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
" http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<constant name="struts.convention.package.locators" value="action" />
<!-- 指定允许上传的文件最大字节数,默认值是2097152(2M),使用struts常量扩大默认上传文件大小 -->
<constant name="struts.multipart.maxSize" value="104857600"></constant>
  <package name="json-default" extends="struts-default">
        <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult"/>
        </result-types>
        <interceptors>
            <interceptor name="json" class="org.apache.struts2.json.JSONInterceptor"/>
        </interceptors>
    </package>
</struts>


uploadAction.java
package com.figo.action;

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 org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.InterceptorRef;
import org.apache.struts2.convention.annotation.InterceptorRefs;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;

import com.opensymphony.xwork2.ActionSupport;

@Action("fileUpload")
@ParentPackage(value = "json-default")
@InterceptorRefs(value = { @InterceptorRef("fileUploadStack")})
@Results({ @Result(name = "jsonType", type = "json") })
public class FileUploadAction extends ActionSupport {
private static final int BUFFER_SIZE = 16 * 1024;

/**
 * 需要上传的文件
 */
private File files;

/**
 * 上传文件的类型
 */
private String filesContentType;

public File getFiles() {
 return files;
}

public void setFiles(File files) {
 this.files = files;
}

public String getFilesContentType() {
 return filesContentType;
}

public void setFile sContentType(String filesContentType) { 
 this.filesContentType = filesContentType;
}

public String getFilesFileName() {
 return filesFileName;
}

public void setFilesFileName(String filesFileName) {
 this.filesFileName = filesFileName;
}

public String getStorageFileName() {
 return storageFileName;
}

public void setStorageFileName(String storageFileName) {
 this.storageFileName = storageFileName;
}


/**
 * 文件名
 */
private String filesFileName;

/**
 * 上传之后的文件名
 */
private String storageFileName;

/**
 * 文件上传的路径
 */

/**
 * 新文件上传
 *
 * @return
 */
public String upload() {
    try {
        // 将Struts2自动封装的文件名赋给要写入的文件
        storageFileName = filesFileName;
        // 创建要写入的文件
        File storageFile = new File("D://" + storageFileName);
        copy(files, storageFile);
        return "jsonType";
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

/**
 * 上传文件的主要方法
 *
 * @param src
 * @param dst
 * @return
 */
public boolean 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 = new byte[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();
    }
    return true;
}

}

uploaddemo-js-lib.zip

fileUploadDemo.zip




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值