我使用(Valums uploader)上传文件,我在服务器端使用servlet。文件类型是application / 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中没有其他输入参数的机会。上面代码中的字节数组也是为了下载而传递的。为什么数据会被破坏?
答案 0 :(得分:0)
您的问题可能是您正在读取的数据长度。我有类似的问题,并在此问题上发布了链接 Java: Binary File Upload using Restlet + Apache Commons FileUpload
希望这会有所帮助