Struts2文件上传

package com.zhao.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 com.opensymphony.xwork2.ActionSupport;

/**
 * 
 * @author: zhao
 * @time: 2016年5月14日
 * 
 * @description:strut2文件上传
 */
public class FileUpAction extends ActionSupport {
    private static final long serialVersionUID = 1L;
    private File upload;// 上传文件
    private String uploadFileName;// 文件名称
    private String uploadContentType;// 文件类型
    static final String Path = "E://OA/";

    @Override
    public String execute() throws Exception {
        InputStream inputStream = new FileInputStream(upload);
        File target = new File(Path + uploadFileName);
        OutputStream outputStream = new FileOutputStream(target);
        System.out.println(upload.getName() + ":" + upload.getPath());
        BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
        BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);
        int c;
        while ((c = bufferedInputStream.read()) != -1) {
            bufferedOutputStream.write(c);
            bufferedOutputStream.flush();// 清空缓存
        }

        bufferedInputStream.close();
        bufferedOutputStream.close();
        return SUCCESS;
    }

    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    
    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

}
<?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.devMode" value="true" />
    
    <package name="file" namespace="/" extends="struts-default">
        <action name="up" class="com.zhao.action.FileUpAction">
            <result>down.jsp</result>
        </action>
    </package>

</struts>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="up.action" method="post" enctype="multipart/form-data">
        <input type="file" name="upload"/>
        <input type="submit" value="Submit"/>
    </form>
</body>
</html>

Action struts.xml 以及前段jsp都有了,功能也实现了。但是有几个需要注意的点:

1:

private File XXX;// 上传文件
private String XXXFileName;// 文件名称
private String XXXContentType;// 文件类型

这三个内容要一致,至于XXX是什么值,是前端jsp中type 为file的那个组件的name

<input type="file" name="upload"/>

如果不一致,必然出错。

我做测试的时候把XXXFileName写成了XXXFilename,然后就无法获取正确的文件名。上传后的文件名就是null。

2:

这个报错信息是说没有找到临时路径,按道理来说是不应该出这个错误的,因为我们有默认的临时路径,既然出错了,那就解决一下:

在strtus.xml或者是struts.properties中配置struts.multipart.saveDir的值,比如说改成/tmp/。就可以了。

原文地址:https://www.cnblogs.com/zhao307/p/5492759.html