1

我正在使用 using ( Valums uploader ) 上传文件,并且在服务器端使用 servlet。文件类型是应用程序/pdf。代码是:

String filename= request.getHeader("X-File-Name");
InputStream is = request.getInputStream();
File tmp = File.createTempFile(filename, "");
tmp.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tmp);
IOUtils.copy(is, fos);
byte[] bytes = new byte[(int) tmp.length()];
is.read(bytes);

现在这些字节作为 longblob 存储到数据库中。但似乎上面代码中的 inputStream 在文件中添加了更多数据,这就是文件数据被破坏的原因。我下载了与pdf文件相同的数据,发现原始上传的文件和现在下载的文件大小相同,但是在Acrobat中打开下载的文件时,它报告“文件已损坏”。对于上传请求,我只使用了文件输入。因此 inputStream 中没有其他输入参数的机会。上面代码中的字节数组也是传递给下载的。为什么数据会损坏?

4

1 回答 1

0

您的问题可能是您正在阅读的数据长度。我有类似的问题并发布在这个问题链接 Java: Binary File Upload using Restlet + Apache Commons FileUpload

希望这可以帮助

于 2018-07-25T01:59:36.910 回答