1

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

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

4

1 回答 1

0

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

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

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

会将其保存到与/uploaded_resources启动网络服务器相同的磁盘的根目录中的文件夹中。因此,例如在 Windows 中将是C:\uploaded_resources. 准备并使用该文件夹。

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

于 2012-05-31T12:53:31.760 回答