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>


posted on 2013-06-15 14:48  张叫兽的技术研究院  阅读(305)  评论(0编辑  收藏  举报

导航