我正在使用COS multipart来处理servlet上的文件上传。
在处理部件时,我需要使用额外的发布字段(ParamPart)重命名文件,在这种情况下,'artikelcode'需要预先添加到文件名中。
因此,不是直接将FilePart写入磁盘,而是需要将输入流保存在内存中。
这是我到目前为止的代码:
MultipartParser multipartParser = new MultipartParser(request, 100000000);
String artikelcode = null;
String filename = null;
InputStream in = null;
while ((part = multipartParser.readNextPart()) != null) {
if (part.isFile()) {
FilePart filePart = (FilePart) part;
filename = filePart.getFileName();
//long fileSize = filePart.writeTo(new File(fileSavePath));
if (filename != null) in = filePart.getInputStream();
}
if (part.isParam()) {
ParamPart paramPart = (ParamPart) part;
if (paramPart.getName().equals("artikelcode")) artikelcode = paramPart.getStringValue();
}
}
if (in != null)
{
String fileSavePath = "c:\\upload\\"+artikelcode+"_"+filename;
File file = new File(fileSavePath);
OutputStream out = new FileOutputStream(file);
IOUtils.copy(in, out);
out.close();
}
当文件保存在磁盘上时,它是空的!
感谢您的帮助!!
答案 0 :(得分:2)
调用readNextPart()
会使您从上一部分获得的任何数据无效。
这是一种更好的方法:始终使用临时名称保存文件,然后重命名。
这使您可以慷慨地处理许多常见错误:磁盘已满,保存时出错等,因为在100%确定新文件完成之前,您永远不会覆盖现有文件。
答案 1 :(得分:-1)
尝试用这样的单斜杠替换双斜杠..
String fileSavePath = "c:/upload/"+artikelcode+"_"+filename;