Java的上传文件
1. annotations are only available if source level is 5.0
Project->Properties->Java Compiler->取消勾选 "enable project sepecific settings", 点击"Configure Workspace settings…"->Compiler Compliance Level选择5.0或者以上的jdk版本,搞定。
2. The public type FileUploadAction111 must be defined in its own file
类名称和文件名称不一致。
在MyEclips环境下,java类文件只要保存就会进行编译,而不需要进行额外编译操作。
3. 自动生成getter,setter
方式一:右键->source->Generate setter and getter;
方式二:Ctrl+Shift+S->Generate setter and getter;
4. 文件上传
1.jsp文件的form一定要添加
<s:form action="myUserInfo/FileUpload" enctype="multipart/form-data">
2.getUploadFileName的方法返回的是一个包含了指定上传文件夹的路径,而不是文件名称。比如你在struts里面指定<param name="savePath">/upload</param>,那么getUploadFileName返回的就是D:\JavaSpace\HelloWorld\WebRoot\upload,至于文件名就需要自己来起了,这个地方可能有问题,还有待研究,因为至少应该还有地方能偶获取到上传的文件名称,现在使用File对象的getName返回的“upload__74d3cd57_13f45fcf15f__8000_00000000.tmp”,这个不能作为名称了。
3.思路:
首先是后台需要完成保存流的程序以及相应的属性的定义(get/setUploadFileName,get/setUpload,get/setSavePath)。
@Override
public String execute() throws Exception{
FileOutputStream fos = new FileOutputStream(this.getUploadFileName() + "\\" + this.upload.getName());
FileInputStream fis = new FileInputStream(this.getUpload());
byte[] buff = new byte[1024];
int len = 0;
while((len = fis.read(buff)) > 0){
fos.write(buff, 0, len);
}
fos.close();
return SUCCESS;
}
private String getSavePath() throws Exception
{
return ServletActionContext.getServletContext()
.getRealPath(savePath);
}
接着是配置文件需要指定上传的路径(savePath的定义,在后台需要写相应的读取定义(如上所示getSavePath):
<action name="FileUpload" class="mySpace.FileUploadAction">
<param name="savePath">/upload</param>
<result name="success">/helloWorld.jsp</result>
<result name="input">/Error.jsp</result>
</action>
最后就是前台需要的声明form要发送二进制流以及File控件:
<s:form action="myUserInfo/FileUpload" enctype="multipart/form-data">
<s:file name="upload" label="选择文件"/>
<s:submit value="提交"/>
</s:form>