struts2文件上传后找不到文件 与 文件下载的问题

最近做一个关于文件上传下载的项目的时候,碰到几个问题:

1. 文件上传时<s:file name="upload" label="上传论文" ></s:file>,此name属性要有三个对应Action属性

private File upload;
private String uploadFileName;
private String uploadContentType;

2. 文件上传的存放路径,如果只是自己做测试,不用放到磁盘上,用

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

获得项目的相对路径,放在了Tomcat服务器上,在webapp下的相应发布项目里面,每次重启服务器上传的文件都会消失,

是重新发布了。

if(!saveDir.exists()) {
File saveFile = new File(saveDir,uploadFileName);

try {
FileUtils.copyFile(upload, saveFile);
} catch (IOException e) {
System.out.println("文件上传出错!!");
e.printStackTrace();
return "error";
}
}

如果是要运行项目的话建议存在磁盘上将这里File saveFile = new File(saveDir,uploadFileName);加粗改成自己定义的路径;

3. 文件下载的时候,就像上面说的,如果你重新发布了,那么你想要下载你在上次发布时上传的文件的话肯定不会成功的,

文件名中文的话要做处理,如果不作处理可能会碰到这样的问题:

java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [imageStream] in the invocation stack.

  Check the <param name="inputName"> tag specified for this action



我碰到这个问题的时候一开始以为是Check the <param name="inputName"> tag specified for this action这里的问题

但是在网上查到,是因为inputStream返回为null才引起的这个错误,我将文件路径和文件名打印出来以后看到是因为文件名为乱码

然后就是改正乱码了,开始我这样改的:

public String getDownloadFileName() {
String downFileName = fileName;
try {
downFileName = new String(downFileName.getBytes(), "ISO8859-1");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
System.out.println("文件名出错");
e.printStackTrace();
}
return downFileName;
}

但是还是不对,又在配置文件中加入

action name="download" class="net.zjl.action.DownloadFileAction">
<result  type="stream">
<param name="contentType">application/octet-stream;charset=ISO8859-1</param>
<param name="inputName">inputStream</param>
<param name="bufferSize">4096</param>
<param name="contentDisposition">attachment;fileName="${downloadFileName}"</param>
</result>

</action>
中的粗体字符集,可还是不好使,

最后就做很多尝试,终于解决,方法如下:

public void setFileName(String fileName) {
try {
this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

在文件名的setter方法里面有转换一下编码然后就好使了;总之碰到的也就是乱码问题;

在配置文件中还要

4.  最头疼的是在我写完下载Action以后,觉得没什么问题,但是就是报错NO defined Action XXX and result success )not aviable,

反复检查配置文件有没有写错,但真的就没有错,一气之下删掉重写,惊奇的发现竟然好使了,真是愁人啊,和我另一篇 getHibernateTemplate()为null

时一样哪里都没写错,就是不能正常从Spring配置文件中获取getHibernateTemplate()。


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值