我想在我的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);


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

最佳答案

我从未真正使用过SmartUpload,但是我可以告诉您不要将上传的文件保存在webapp的deploy文件夹中。每当重新部署Web应用程序时,它们都可能丢失,原因很简单,即原始的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()对最后一个/\之后的部分进行子字符串化。

09-11 10:28