日期:2014-05-19  浏览次数:20608 次

Struts 2多文件上传路径问题
不多说了!直接贴代码!!
upload(是放在WebRoot下的)
Java code
public String execute() throws Exception{
        //取得需要上传的文件数组
        File[] files = getUpload();
        //遍历每个需要上传的文件
        for (int i = 0; i < files.length; i++) {
            System.out.println(files[i]);
            //以服务器的文件保存地址和源文件名建立上传文件输出流
            FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+getUploadFileName()[i]);
            //以每个需要上传的文件建立输入流
            FileInputStream fis = new FileInputStream(files[i]);
            //将每个需要上传的文件写入
            byte[] buffer = new byte[1024];
            int length = 0;
            while ((length=fis.read(buffer))>0) {
                fos.write(buffer,0,length);
            }
            fos.close();
        }
        return SUCCESS;
    }



XML code
<package name="mystruts" extends="struts-default">
        <action name="upload" class="com.app.action.UploadAction">
            <!-- 动态设置Action的savePath属性 -->
            <param name="savePath">/upload</param>
            <!-- 配置文件上传的拦截器 -->                       
            <interceptor-ref name="fileUpload">
                <!-- 配置允许上传的文件类型 -->
                <param name="allowedTypes">image/png,image/gif,image/jpeg</param>
                <param name="maximumSize">20480000</param>
            </interceptor-ref>
            
            <!-- 配置系统默认的拦截器 -->
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <result name="success">/success.jsp</result>
            <result name="input">/upload.jsp</result>
        </action>
    </package>


个人感觉应该是没有问题的:但是上传的时候就是报如下错误:
java.io.FileNotFoundException: \upload\gyutiu.jpg (系统找不到指定的路径。)
java.io.FileOutputStream.open(Native Method)
java.io.FileOutputStream.<init>(FileOutputStream.java:179)
java.io.FileOutputStream.<init>(FileOutputStream.java:70)
com.app.action.UploadAction.execute(UploadAction.java:64)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
。。。。。。。。。。。。。
求解!!!!!!!!

------解决方案--------------------
路径错了
getSavePath()+"\\"+getUploadFileName()[i] 值应该是部署路径+[自定义目录+]文件名
FileNotFoundException: \upload\gyutiu.jpg 至少应该是个绝对路径
另外你代码没贴全 只能猜了
你的输入流是通过files[i]拿到的 那你得保证Action中有filesFileName和filesContentType两个属性
Java code

private File[] files;
    private File[] fileFileName;
    private File[] fileContentType;
//getters && setters
public String execute() throws Exception {
      for (int i = 0; i < files.length; i++) {
                   //...
            String root = ServletActionContext.getRequest().getSession()
                    .getServletContext().getRealPath("/upload");
                      //加点东西  保证目录: %deployPath%+"/upload" 存在
            File destFile = new File(root, fileFileName.get(i));
                   //...
        }