Java:使用JavaScript上传图片 - 文件已损坏,损坏或过大

时间:2017-11-16 12:11:04

标签: javascript java spring image-uploading corrupt-data

嘿伙计我需要解释我的代码有什么问题!但首先我要说的是,我既不是春天的专家也不是用Java上传文件...

我使用 Spring Boot 作为后端服务器,我有一个 JavaScript 前端。 要在前端和后端之间发送数据,请使用 Is it possible to mock a function imported from a package in golang? ,这通常可以正常工作。

问题:
图像在(Chrome)浏览器控制台中如下所示: Axios library 它是一个非常长的字母数字字符串,是我使用以下代码发送到服务器的字符串:

static uploadFiles(files) {
    const data = new FormData();

    Object.keys(files).forEach(key => {
        data.append("files", new Blob([files[key]], { type: 'image/jpeg' }));
    });

    const url = API_URL + "uploadFiles";
    return axios.post(url, data, RestServices.getAuth({
        "Content-Type": "multipart/form-data;boundary=gc0p4Jq0M2Yt08jU534c0p"
    }));
}

我不知道boundary做了什么,但它在后端收到了一个文件......

在后端(弹簧)方面,我成功收到了一个MultipartFiles数组:

@RequestMapping(value = "/uploadFiles", method = RequestMethod.POST)
@ResponseBody
public boolean uploadFiles(HttpServletRequest request, @RequestParam("files") MultipartFile[] files) throws IOException {
    String filePath = Thread.currentThread().getContextClassLoader().getResource("assets/images/").getFile();
    InputStream inputStream;
    OutputStream outputStream;
    for(MultipartFile file : files) {
        File newFile = new File(filePath + file.getOriginalFilename() + ".jpg");
        inputStream = file.getInputStream();

        if (!newFile.exists() && newFile.createNewFile()) {
            outputStream = new FileOutputStream(newFile);
            int read;
            byte[] bytes = new byte[1024];

            while ((read = inputStream.read(bytes)) != -1) {
                outputStream.write(bytes, 0, read);
            }
        }
        System.out.println(newFile.getAbsolutePath());
    }
    return true;
}

我还尝试了file.transferTo(newFile);而不是输入和输出流 - 它们也没有用。
之后,我得到以下输出,这意味着图像已成功保存: /path/to/blob.jpg
如果我检查文件上传的路径,有一个名为blob.jpg的文件,但如果我打开它,windows photo viewer会出现以下问题: Console output 我用notepad ++上传前后打开图像:
之前上传: Error in windows photo viewer 我认为这是一个字节数组,但如果我在上传后打开图像,我会得到完全浏览器的输出。这意味着它没有转换为字节数组(如果我错了,请纠正我),我相信这就是为什么它是一个腐败的图像...

我的问题是:

  • 问题是什么
  • 如何 修复呢?

我真的尝试了所有想到的东西,但我没有想法。

感谢您的帮助! : - )


我已阅读以下相关的问题(但他们有答案):
Image before upload (Byte Array)Question1很多更多......

0 个答案:

没有答案