您的位置:首页 > 编程语言 > Java开发

struts2文件上传注意事项

2014-04-19 00:00 399 查看
摘要: 今天在网上收集了一些struts2文件上传资料自己做了些修改里面涉及一些自己程序中出现问题和需要注意的地方。

给表单form设置属性:enctype="multipart/form-data",为了保证file文件内容能正常传递。

注意保持表单中的action名称与struts.xml中设置的一致,为了保证通过配置文件能够找到处理表单action类。

在struts.xml应设置常量<constant name="struts.multipart.saveDir" value="/tmp">。这是因为文件上传时在内存中需要一个临时存储该文件内容的地方也即"/tmp"只是个临时中转站。若没有配置该常量,后台会报not found struts.multipart.saveDir"错。

因为上传的文件是存储在服务器下的(我这里是将文件保存在web应用目录upload文件下),因此事先必须先创建upload文件否则出现无法找到相应路径异常。

相关代码:jsp页面

<form action="Upload" method="post" enctype="multipart/form-data">

<table>

<tr> <td>上传文件:<input type="file" name="file"></td></tr>

<tr><td><input type="submit" value="上传"/></td></tr>

</table>

</form>


struts.xml配置文件

<package name="default" extends="struts-default">

<action name="Upload" class="com.action.UploadAction">

<result name="success">/successUpload.jsp</result>

</action>

</package>


处理上传文件类UploadAction

package com.action;

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

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport{

/**
*
*/
private static final long serialVersionUID = 1L;

private File file;

public File getFile() {
return file;
}

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

public String getFileFileName() {
return fileFileName;
}

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

public String getFileContentType() {
return fileContentType;
}

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

private String fileFileName;

private String fileContentType;

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub

InputStream inputStream = new FileInputStream(this.getFile());

String path = ServletActionContext.getServletContext().getRealPath("/upload");

System.out.println("获得的路径为:"+path);

OutputStream outputStream = new FileOutputStream(new File(path,fileFileName));

byte buffer[] = new byte[1024];

int length = 0;

while((length=inputStream.read(buffer))>0){

outputStream.write(buffer,0,length);

}

outputStream.close();

inputStream.close();

return SUCCESS;
}

}


验证文件是否上传成功:successUpload.jsp页面

<body>

上传文件名:${fileFileName} <br/>
上传文件类型:${fileContentType}

</body>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: