锁定老帖子 主题:struts2文件上传下载(提供原代码)
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-29
最后修改:2010-01-26
开发上传下载必须注意的问题: Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 1.先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。 2.FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<s:file/>和<s:textfield/>标志。但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。 3.struts2必须的jar文件如下:.classpath文件配置jar文件如下 <?xml version="1.0" encoding="UTF-8"?>
web.xml的配置: <?xml version="1.0" encoding="UTF-8"?> <welcome-file-list>
<?xml version="1.0" encoding="UTF-8" ?> package cn.com.unusap.spring.fileupload; import java.io.BufferedInputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public File getImgFile() { public void setImgFile(File imgFile) { public String getImgFileContentType() { public void setImgFileContentType(String imgFileContentType) {
public String getImgFileFileName() { public void setImgFileFileName(String imgFileFileName) { public String getCaption() { public void setCaption(String caption) { private static void copy(File src, File dst) { } private static String getExtention(String fileName) { @Override }
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-05-04
好像<s:file> 控件不能和别的表单控件共存在一个Form里面,特别是Ajax控件,会导致Ajax控件无法工作。
我在项目里面的时候只能把上传作为一个单独的页面。上传完了再回到原来的页面(因为原来的页面里面有好几个AJAX标签)。 比较麻烦。 |
|
返回顶楼 | |
发表时间:2009-05-11
为什么不用 org.apache.commons.io.FileUtils ,
而还要自己写流策略哪? private File upload; private String uploadContentType; private String uploadFileName; 其中:后两个属性的名字有File 的属性名字决定,自动加载名字。 String targetFileName = "/opt/files/" + uploadFileName; FileUtils.copyFile(upload,targetFileName) |
|
返回顶楼 | |
发表时间:2009-06-14
ArdenL 写道 为什么不用 org.apache.commons.io.FileUtils ,而还要自己写流策略哪?private File upload;private String uploadContentType;private String uploadFileName;其中:后两个属性的名字有File 的属性名字决定,自动加载名字。String targetFileName = "/opt/files/" + uploadFileName;FileUtils.copyFile(upload,targetFileName) 哈哈,针对struts2上传下载必须的属性三个字段哦,在获取三个属性之后才可以使用FileUtils上传文件。希望你看一下struts2的源代码哦,可以继续讨论哦 |
|
返回顶楼 | |
发表时间:2009-06-14
bryan.liu 写道 好像<s:file> 控件不能和别的表单控件共存在一个Form里面,特别是Ajax控件,会导致Ajax控件无法工作。 我在项目里面的时候只能把上传作为一个单独的页面。上传完了再回到原来的页面(因为原来的页面里面有好几个AJAX标签)。 比较麻烦。 可以放多个<s:file> 控件,不过Action中三个字段必须使用数组形式而已,至于上传过程好像一样的,没有什么区别哦 |
|
返回顶楼 | |
发表时间:2010-01-16
楼主我像想你请教一下
这个图片上传到uploadImange这个文件家里面 但是怎么上传了之后不能看到这个图片呢 但是能够从这里读取出来,说名文件上传是成功了 |
|
返回顶楼 | |
发表时间:2010-01-19
开心凯迪GiveMe 写道 楼主我像想你请教一下
这个图片上传到uploadImange这个文件家里面 但是怎么上传了之后不能看到这个图片呢 但是能够从这里读取出来,说名文件上传是成功了 注意:uploadImage这个目录首先必须存在,如果不存在可能上传文件在默认的临时默认,请参看struts.properties文件的相对目录中。 ### Parser to handle HTTP POST requests, encoded using the MIME-type multipart/form-data # struts.multipart.parser=cos # struts.multipart.parser=pell struts.multipart.parser=jakarta # uses javax.servlet.context.tempdir by default struts.multipart.saveDir= struts.multipart.maxSize=2097152 struts.properties中可以设置默认的临时目录,和上传文件的大小以及上传的方式 |
|
返回顶楼 | |
发表时间:2010-01-26
struts2使用文件上传的话,也可以不使用他的<s:file>使用普通的<file>也可以,这就解决了Ajax控件不能用的问题,在上传文件时,必须要指定好文件的路径,否则得话可能读到了临时文件中,上传成功,但是你却看不到,我以前经常用到这些,所以看到你们的讨论,就说一些,希望能够帮到你们
|
|
返回顶楼 | |
发表时间:2010-01-26
wzglovejava 写道 struts2使用文件上传的话,也可以不使用他的<s:file>使用普通的<file>也可以,这就解决了Ajax控件不能用的问题,在上传文件时,必须要指定好文件的路径,否则得话可能读到了临时文件中,上传成功,但是你却看不到,我以前经常用到这些,所以看到你们的讨论,就说一些,希望能够帮到你们
其实使用<s:file> 和<input type="file"> 肯定一样,因为struts2.0使用他们都是通过OGNL实现传递参数的过程! |
|
返回顶楼 | |
浏览 23468 次