无法打开 JPG - 解释 JPEG 图像文件时出错

无法打开 JPG - 解释 JPEG 图像文件时出错

我使用 graph api 向 OneDrive 进行了一些示例上传。我能够通过 OkHttp 成功上传文件(文本文件)。但是,当涉及到图像时,我在打开图像后收到此消息

Error interpreting JPEG image file (Not a JPEG file: starts with 0xef 0xbf)

将图像上传到 onedrive 后,.svg格式图像上传成功,但.jpg, .png上传到一个驱动器时格式图像损坏。

以下是我的方法。

将图像转换为字节数组,然后将该字节数组转换(写入)为上传文件。

   String url = "https://graph.microsoft.com/v1.0/drive/root:/" + step.file_name + ":/content";

                    Request request = new Request.Builder().url(url)
                            .put(RequestBody.create(MediaType.parse("image/*"), step.file_data))
    //step.file_data contains the byte array.
                            .addHeader("Authorization", String.format("Bearer %s", step.getAccess_token()))
                            .build();
Response response = okHttpClient.newCall(request).execute();

这种方法适用于文本文件和 .svg 格式的图像,但不适用于其他格式的图像。我查阅了很多参考资料/网站,但找不到方法。可能是什么原因?!提前谢谢 :)

答案1

由于 SVG 文件基本上是 XML 文件(即文本文件),我怀疑你的问题实际上在于二进制文件,很可能是字节顺序问题。

当字节数组被组装并通过网络传输时,它不是逐字节写入,而是聚合成更大的块(可能是出于速度原因)。
例如,您想从您的机器发送 4 个字节( ),但它们在远程服务器上ABCD被写入。BADC

至于为什么文本文件不会发生这种情况……通常文本文件由简单的 ASCII 字符组成(除非它们是用 UTF-8 或类似的编码...),所以它们是逐字节处理的。

相关内容