Как сохранить данные в matlab. net .http.ResponseMessage из запроса GET в файл - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь узнать, как использовать Matlab http интерфейс . И я надеюсь загрузить несколько .swf файлов.

Кажется, Matlab может загрузить файл, если URL действителен, следуя примеру отправки HTTP-сообщения в документации для письмо. И я говорю, что, кажется, загрузка работает, потому что .ContentType возвращает то, что ожидается.

>> resp.Body.ContentType
ans = 
  MediaType with properties:

          Type: "application"
       Subtype: "x-shockwave-flash"
    Parameters: "["charset" "utf-8"]"
     MediaInfo: "application/x-shockwave-flash; charset=utf-8"
        Weight: []

Но как вы сохраняете данные в файл, когда данные не являются изображением или текстом? Я не могу найти никаких документов по этому вопросу. ( пример )


РЕДАКТИРОВАТЬ:

Моя попытка.

Я думаю, что применяется следующий отрывок из документации :

Если MATLAB не поддерживает тип или если для свойства HTTPOptions.ConvertResponse установлено значение false, то:

  • Если тип основан на символах , затем Data содержит полезную нагрузку, преобразованную в строку.

  • В противном случае Data содержит необработанный вектор uint8.

Итак, я собирался наивно пытаться вывести полезную нагрузку в текстовый файл и надеяться на лучшее. Сначала несколько вещей.

>> class(resp.Body.Data)
ans =
    'string'

>> current = slCharacterEncoding()
current =
    'windows-1252'

Я попытался записать данные в текстовый файл, не беспокоясь о потенциальных проблемах кодирования. Излишне говорить, что это не работает.

>> fid=fopen('out1.swf','wt');
>> fprintf(fid,'%s',resp.Body.Data);
>> fclose(fid);

Первая строка результирующего файла, когда читается в шестнадцатеричном коде, это

4357 5309 1a7e 0000 781a 1a1a 0938 1a1a

, в то время как правильный файл при загрузке Chrome и возможность отображения правильного содержимого напрямую:

4357 5309 a5bc 0000 78da 7cbb 0934 d46f

Изменение кодировки на utf-8 с использованием slCharacterEncoding либо не работает в этом случае, либо кодировка все еще неверна. Первая строка вывода файла выглядит следующим образом.

>> slCharacterEncoding('UTF-8');
>> resp = send(r,uri);
>> fid=fopen('out1.swf','w+');
>> fprintf(fid,'%s',resp.Body.Data);
>> fclose(fid);

4357 5309 efbf bd7e 0000 78ef bfbd efbf

(Я знаю, что файлы не должны быть идентичными для правильного чтения. Я визуально проверил вывод. Я использую только первую строку, чтобы продемонстрировать несоответствие .)

Что пошло не так?

1 Ответ

0 голосов
/ 06 апреля 2020

Я думаю, вы не понимаете, что такое файл. Файлы хранятся в любом текстовом формате, даже изображения. Если бы я получил файл jpeg через HTTP и захотел записать это в файл, я бы направил тело ответа в файл так же, как текстовый файл, и сохранил его как .jpg. Тип файла тогда определяет, как текст обрабатывается любыми другими приложениями. Это помогает вообще?

...