Не удается открыть JPG - Ошибка при интерпретации файла изображения JPEG
Я сделал несколько примеров загрузок в OneDrive с использованием Graph 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, но не для изображений в другом формате. Я просмотрел много ссылок / сайтов, но не смог найти способ. Что может быть причиной?! Заранее спасибо
1 ответ
Поскольку файлы SVG в основном представляют собой файлы XML (т.е. текстовые файлы), я подозреваю, что ваша проблема на самом деле связана с двоичными файлами, скорее всего, с проблемой порядка байтов.
Когда байтовый массив собирается и передается по сети, он не записывается побайтово, а объединяется в большие куски (вероятно, по соображениям скорости).
Например, вы хотите отправить 4 байта (ABCD
) с вашей машины, но они пишутся как BADC
на удаленном сервере.
Почему с текстовыми файлами этого не происходит... обычно текстовые файлы состоят из простых символов ASCII (если они не закодированы в UTF-8 или что-то подобное...), поэтому они обрабатываются побайтово.