2016-10-20 3 views
0

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

Глядя, что это 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 

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

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

EDIT:

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

+0

S3 поддерживает дополнительный заголовок для загрузки «Content-MD5», который должен быть установлен на base64 - двоичный двоичный файл MD5 загруженного объекта. Если 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, но вы можете заставить его записать нужный контент.

+0

Пробовал, но не работал. Точно такая же проблема – robby987

+0

Не пыталась «Body = data» – robby987

+0

обновить свой код, как вы нажимаете свой файл, используя код python - попробуйте загрузить файл прямо из вашего браузера и установить тип содержимого у вас есть та же проблема? –

Смежные вопросы