#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 не изменяет содержимое вашего файла .. опубликуйте свой код так, как вы в данный момент выполняете загрузку