Я сделал некоторые демонстрационные загрузки на OneDrive с помощью API графика. Я могу загрузить файлы (текстовые файлы) успешно через 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-файлами (т.е. текстовые файлы), я подозреваю, что Ваша проблема на самом деле с двоичными файлами, скорее всего, проблема порядка байтов.
Когда массив байтов собран и передал потоком через сеть, это не записанный байт байтом, но агрегированный в больших блоках (вероятно, по причинам скорости).
Например, Вы хотите отправить 4 байта (ABCD
) от Вашей машины, но они записаны как BADC
на удаленном сервере.
Как, почему с текстовыми файлами этого не происходят... хорошо обычно текстовые файлы, состоявшие из простых символов ASCII (если они не кодируются в UTF-8 или таком...), таким образом, они - обработанный байт байтом вместо этого.