为什么我的jspSmartUpload代码不起作用?

时间:2012-05-31 12:40:42

标签: java jsp servlets

我想在我的servlet文件中实现一个上传组件,但它不起作用。 代号插曲如下:

SmartUpload smartUpload=new SmartUpload();
StringBuffer stringBuffer=new StringBuffer();
smartUpload.initialize(config,request, response);
try {
     smartUpload.upload();
 File file=smartUpload.getFiles().getFile(0);
 stringBuffer.append(file.getFileName());
 file.saveAs("/upload_resources/"+stringBuffer);
} catch (SmartUploadException e) {
 e.printStackTrace();
}

upload_resource目录位于WebRoot目录下,代码运行时没有任何错误,但文件没有上传。顺便说一句,即使我改变了行

file.saveAs("/upload_resources/"+stringBuffer);

file.saveAs(request.getRealPath("/upload_resources/")+"/"+stringBuffer);

即使用绝对路径,文件不上传。 任何帮助将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我从未真正使用过SmartUpload,但我可以说你不应该将上传的文件保存在webapp的deploy文件夹中。每当重新部署webapp时,它们都可能会丢失,原因很简单,原因是WAR文件中没有包含上载的文件。所以你不应该在webapp的deploy文件夹中准备上传文件夹,而是在deploy文件夹之外的固定路径上。

如果SmartUpload设计得很好,我希望

file.saveAs("/upload_resources/"+stringBuffer);

会将其保存到与启动Web服务器的同一磁盘的根目录上的/uploaded_resources文件夹中。所以在例如Windows C:\uploaded_resources中。准备并使用该文件夹。

当您使用MSIE浏览器时,还有另一个潜在的问题。此浏览器错误地包含文件名中的完整客户端路径。我不确定SmartUpload是否正确处理了这个问题,但您可能希望调试file.getFileName()的实际值,并确保它实际上只是filename.ext形式的文件名。否则,您需要使用String#substring()在最后/\之后对零件进行子串。