我使用图形 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 格式的图像,但不适用于其他格式的图像。我浏览了许多参考资料/网站,但找不到方法。可能是什么原因?!先感谢您
由于 SVG 文件基本上是 XML 文件(即文本文件),我怀疑您的问题实际上是二进制文件,很可能是字节顺序问题。
当字节数组通过网络组装和流式传输时,它不是一个字节一个字节地写入,而是聚合成更大的块(可能是出于速度原因)。
例如,您想
ABCD
从您的机器发送 4 个字节 ( ),但它们被写入BADC
远程服务器上。至于为什么文本文件不会发生这种情况......通常文本文件由简单的 ASCII 字符组成(除非它们以 UTF-8 等编码......),所以它们是逐字节处理的。