spring3文件上传和保存 - 末尾有额外的空字符

时间:2014-04-30 16:39:03

标签: spring

我正在尝试将文件上传到我的本地spring3 Web应用程序并在本地保存文件。以下是代码段:

@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
    public String saveForm(@ModelAttribute("fileUploadForm") FileUploadForm form, BindingResult result) throws IOException {
        InputStream inputStream = form.getFile().getInputStream();
        logger.debug("uploadfile: "+form.getFile());
        String fileName = form.getFile().getOriginalFilename();
        OutputStream outputStream = new FileOutputStream(tmpFileDir+"\\"+fileName);
        int read = 0;
        byte[] bytes = new byte[1024];

        while ((read = inputStream.read(bytes)) != -1) {
            outputStream.write(bytes);          
        }

        outputStream.close();

        return "fileUploadSuccess";     
    }

执行文件上传的jsp文件是:

<form:form method="post" action="uploadFile" modelAttribute="fileUploadForm" enctype="multipart/form-data">
    <table>
        <tr>        
        <td><input name="file" type="file" /></td>
        <td></td>
        </tr>
        <tr>
        <td>
        <input type="submit" value="<spring:message code="label.upload"/>" name="submit" />
        </td>
        </tr>
    </table>
    </form:form>

现在打开上传的文件和保存的文件后,我可以看到保存的文件最后有很多字体。

知道如何解决这个问题吗?

由于

1 个答案:

答案 0 :(得分:0)

将您的while循环更改为:

while ((read = inputStream.read(bytes)) != -1) {
    outputStream.write(bytes, 0, read);          
}

那是因为:

write(byte[] b) - 将指定字节数组中的b.length个字节写入此输出流。因此,它将使用null填充您的输出流,以便在最后一次迭代时达到字节大小。

write(byte[] b, int off, int len) - 将从offset off开始的指定字节数组中的len个字节写入此输出流

希望这有帮助