我想在我的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);
即使用绝对路径,文件不上传。 任何帮助将不胜感激。谢谢。
答案 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()
在最后/
和\
之后对零件进行子串。