Amazon AWS boto S3 изменяет содержимое файла

#python #amazon-web-services #video #amazon-s3 #mp4

#python #amazon-веб-сервисы #Видео #amazon-s3 #МР4

Вопрос:

введите описание изображения здесьПри попытке загрузить файл mp4 на сервер Amazon S3 он загружается. При загрузке размер файла остается точно таким же, но меняются байты 42, 43, 44.

Ищу, что это mdat. http://www.file-recovery.com/mp4-signature-format.htm

Я попытался изменить типы mime на различные, а также даже изменил расширение на exe. Не повезло..

При попытке воспроизвести видео это не работает.

Для этого я использую платформу boto python.

Есть идеи?

  # Uploads a file to a bucket
def upload_file_to_bucket(self, file_path_on_disk, file_name_in_bucket, bucket_name):
    self.remove_file_from_bucket(file_name_in_bucket, bucket_name)
    if os.path.exists(file_path_on_disk):
        print "Uploading "   file_path_on_disk   " to "   file_name_in_bucket   " in bucket "   bucket_name
        bucket = self.get_connection().get_bucket(bucket_name)
        k = bucket.new_key(file_name_in_bucket)
        k.set_contents_from_filename(file_path_on_disk, headers = {'Content-Type' : 'application/octet-stream', 'Body' : 'data'}) # {'Content-Disposition': 'attachment', 'Content-Type' : 'video/mp4'}) headers = {'Content-Type' : 'application/octet-stream'}
        k.set_acl('public-read')
        print "Uploaded file to amazon server "   bucket_name 
    else:
        print "File does not exist so cannot upload "   file_path_on_disk
  

Редактировать:
Смотрим дальше. кажется, что коррупции намного больше. Хитроумный балансировщик нагрузки?

Возможно ли, чтобы файл был правильно загружен? На данный момент это всегда неправильно.

Редактировать:

Это произошло из-за того, что файл не был полностью записан перед загрузкой, если кто-нибудь столкнется с этим.

Комментарии:

1. S3 поддерживает необязательный заголовок загрузки, Content-MD5 который должен быть установлен в двоичный MD5 в кодировке base64 загружаемого объекта. Если boto автоматически не делает этого за вас, разработчикам следует отозвать их права доступа к клавиатуре … потому что S3 отклонит поврежденную загрузку, если этот хэш не совпадает при загрузке — вот как вы гарантируете целостность загрузки. Во-вторых, при загрузке объекта etag устанавливается в шестнадцатеричном формате md5 (или выводится немного более сложный алгоритм для загрузки из нескольких частей). Помогает ли это? Если etag совпадает с md5, он правильно сохранен в S3.

Ответ №1:

Правильный тип контента — video/mp4 вы можете установить его следующим образом из обоих

 data = open('file.mp4', 'rb')
bucket.put_object(Key='file.mp4', Body=data, ContentType='video/mp4')
  

убедитесь, что тип задан правильно после загрузки в s3, перейдите к своему файлу и проверьте свойства / метаданные. Обратите внимание, что video/mp4 этого нет в выпадающем списке доступных типов контента из AWS, но вы можете принудительно использовать его, записав нужный контент

Комментарии:

1. Пробовал это, но не сработало. Точно такая же проблема

2. Не пробовал «Тело = данные»

3. обновите свой код как вы загружаете свой файл с помощью кода python — попробуйте загрузить файл непосредственно из своего браузера и задайте тип содержимого у вас такая же проблема?

4. При использовании dragon disk и отсутствии метаданных все работало нормально.

5. boto не изменяет содержимое вашего файла .. опубликуйте свой код так, как вы в данный момент выполняете загрузку