Struts文件上传
首先在表单中的from的写法是这样的:
1
2
3
4
5
|
< from action = "File_add.action" method = "post" enctype = "multipart/form-data" > FileName:< input type = "text" name = "fileName" > File:< input type = "file" name = "file" > < input type = "submit" value = "Sub" > </ from > |
这里的enctype="multipart/from-data" 指的是上传二进制流
在action对象中设置一个File类型的file和String类型的fileName,并提供getter && setter方法。
然后按照常理,我们可以获取到file, 但是是可以正常获取的,在add方法的return打上一个断点,用debug模式来启动,可以看到file里面以已经有值了,不过名称看不懂,并且该上传文件的类型是一个.temp临时类型。
所以接下来该把文件名和类型名解析出来:
Struts需要我们提供一个getter&&setter即可, 即: 属性的file+FileName 和 file+ContentType 这样的组合名称: eg:fileFileName 和fileContentType 这样的名称,并且提供getter&&setter。
然后在add方法中打印出来: System.out.println(fileFileName+fileContentType); 即可打印出正常的文件名
最后,文件在系统中任然是一个temp的临时文件,我们需要转存到其他地方。
可以使用file的io流, 不过为了简单可以使用:
1
2
|
//FileUtils.copyFile("file","dest"); 第一个参数指源文件,第二个指目标文件 FileUtils.copyFile(file, new File( "H:/temp/" +fileFileName)); |
注意:斜杠不要写反了。 这样就可以转存到本地磁盘中的H盘中了。
另外,对于交大的文件,比如超过2M的文件,就会出现异常了,原因是Struts默认只能上传2兆多点的文件。
设置方法,打开Struts.defult文件,里面有一个struts.multipart.maxSize=xxxxx
copy然后 在Struts.xml文件中添加一个常亮:
<constant name="struts.multipart.maxSize" value="10240000"/> 可以支持最大10M的文件了。