Облачное хранилище Google: установка неверного MIME-типа

У меня есть сервер Node.js, работающий на виртуальном экземпляре Google Compute Engine. Сервер передает входящие файлы в Google Cloud Storage GCS. Мой код здесь: поток Node.js загружается непосредственно в Google Cloud Хранилище

Я передаю Content-Type в заголовках XML, и он отлично работает для image/jpeg MIME-типов, но для video/mp4 GCS записывает файлы как application/octet-stream.

В этом нет ничего особенного, поэтому я совершенно не понимаю, что может быть не так ... любые идеи приветствуются!

Обновление / решение

Проблема возникла из-за того, что модуль multiparty создавал content-type: octet-stream заголовки для объекта 'part', который я передавал в конвейер в GCS. Это заставило GCS получить два content-types, из которых octet часть была последней. В результате GCS использовал это для входящего файла.


person Dan    schedule 01.01.2014    source источник
comment
Не могли бы вы опубликовать, как выглядит ваш http-запрос? Вы уверены, что видео / mp4 действительно установлено в качестве типа контента в HTTP-запросе?   -  person markovuksanovic    schedule 02.01.2014
comment
@markovuksanovic спасибо за помощь; пожалуйста, смотрите выше   -  person Dan    schedule 02.01.2014
comment
Вы можете подтвердить, что это многостраничная загрузка? В таком случае должно быть отправлено несколько HTTP-запросов? Можете ли вы также предоставить заголовки и текст HTTP-ответа для этого запроса (и других, если они есть)?   -  person markovuksanovic    schedule 02.01.2014
comment
@markovuksanovic Мой уровень знаний по HTTP довольно низок - как я могу убедиться, что он составной? Другая информация указана выше (console.log ответа от Google).   -  person Dan    schedule 02.01.2014
comment
Вы можете использовать wirehark для отслеживания http. Убедитесь, что вы используете не HTTPS-запросы, а только HTTP (только в целях тестирования). Вы также можете отправить мне / поделиться файлом захвата, чтобы я мог посмотреть, что происходит.   -  person markovuksanovic    schedule 02.01.2014
comment
@markovuksanovic Очень признателен - проблема в том, что запрос PUT выполняется из экземпляра виртуальной машины Google Compute Engine - ›Облачное хранилище Google ..... Заметили ли вы отдельно, что заголовки содержат два разных типа контента?   -  person Dan    schedule 02.01.2014
comment
Я обновил ответ, добавив дополнительную информацию о загрузке. Посмотрите, решит ли это вашу проблему. Я думаю, вам не хватает заголовка X-Upload-Content-Type.   -  person markovuksanovic    schedule 02.01.2014


Ответы (2)


Хорошо, глядя на ваш HTTP-запрос и ответ, кажется, что тип содержимого указан в URL-адресе, возвращаемом как часть начального HTTP-запроса. Первоначальный HTTP-запрос должен возвращать конечную точку, которую можно использовать для загрузки файла. Я не уверен, почему это указано там, но смотрю документацию (https://developers.google.com/storage/docs/json_api/v1/how-tos/upload - начать возобновляемый сеанс) в нем говорится, что необходимо указать X-Upload-Content-Type вместе с некоторые другие заголовки. Кажется, это не указано в HTTP-запросах, упомянутых выше. Может быть проблема с используемой библиотекой, но возвращенная конечная точка не выглядит так, как указано в документации.

Взгляните на https://developers.google.com/storage/docs/json_api/v1/how-tos/upload, «Пример: возобновляемый запрос на начало сеанса» и посмотрите, сохраняется ли у вас та же проблема, если вы укажете те же заголовки, что и предложены там.

person markovuksanovic    schedule 01.01.2014
comment
Думаю, вы неправильно читаете ресурс iana.org; вы заметите, что не можете найти ни image / jpg, ни image / jpeg ... но они работают нормально. Я считаю, что до тех пор, пока тип файла указан в таблице, он действителен ... а mp4 указан в разделе видео. Хотя я мог ошибаться ... - person Dan; 01.01.2014
comment
Хорошо, вы правы, video / mp4 должно корректно работать для GCS. Я попытался вручную загрузить видео в формате mp4, и ему был назначен тип mime video / mp4. В этом отношении ты прав. Не могли бы вы предоставить свои HTTP-запросы, которые отправляются? - person markovuksanovic; 02.01.2014
comment
Вы объявили тип контента или просто позволили Google решать? - person Dan; 02.01.2014

Google Cloud Storage не зависит от типа контента, т. Е. Одинаково обрабатывает любой контент (видео, музыку, zip-файлы, документы и т. Д.).


Но просто чтобы дать некоторое представление,

Во-первых, я считаю, что загружаемое вами видео () имеет более или менее размер после загрузки. Итак, он попадает в application/<sub type>. (аналогично разделу 3.3 RFC 4337)

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

сообщите нам о своем решении.

person Siva Tumma    schedule 01.01.2014