Buradaki ilk sorum, bu dünya için oldukça yeni olduğum için burada! Birkaç günümü kendim için çözmeye çalıştım ama şimdiye kadar hiç yararlı bir bilgi bulamadı.Boto "get byte range" değeri beklenenden daha fazla döner
ben gibi bir şey kullanarak, S3 saklanan bir dosyadan bir bayt aralığı almaya çalışıyorum:
S3Key.get_contents_to_file(tempfile, headers={'Range': 'bytes=0-100000'}
ben den geri çalışıyorum dosya, spesifik olarak bir MXF video dosyasıdır. Bayt aralığı istediğimde, tempfile daha fazla bilgiyi geri istenir. Örneğin, bir dosya kullanarak 100.000 bayt talep ediyorum ve 100.451 dolar. MXF dosyaları hakkında nota
şeylerden biri insanların meşru 0x0A (ASCII satır besleme) ve 0x0D (ASCII satırbaşı) içermesidir.
Etrafımda bir kazı yaptım ve dosyada 0D bayt herhangi bir zaman bulunduğunda, alınan bilgi yalnızca 0D yerine 0A 0D ekler, bu nedenle gerekli olandan daha fazla bilgi almak için görünür.
Örnek olarak, orijinal dosya Hex dizesini içerir:
02 03 00 00 00 00 3B 0A 06 0E 2B 34 01 01 01 05
Ama dosya indirilen formu S3 vardır:
02 03 00 00 00 00 3B 0D 0A 06 0E 2B 34 01 01 01 ben kod hata ayıklama ve Boto mantığı boyunca çalışabilir denedim, ama bu nispeten yeni olduğum
05, bu yüzden çok kolay kaybolmak.
ben konuyu gösteren test yaratmadınfrom boto.s3.connection import S3Connection
from boto.s3.connection import Location
from boto.s3.key import Key
import boto
import os
## AWS credentials
AWS_ACCESS_KEY_ID = 'secret key'
AWS_SECRET_ACCESS_KEY = 'access key'
## Bucket name and path to file
bucketName = 'bucket name'
filePath = 'path/to/file.mxf'
#Local temp file to download to
tempFilePath = 'c:/tmp/tempfile'
## Setup the S3 connection and create a Key to access the file specified
## in filePath
conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
bucket = conn.get_bucket(bucketName)
S3Key = Key(bucket)
S3Key.key = filePath
def testRangeGet(bytesToRead=100000): # default read of 100K
tempfile = open(tempFilePath, 'w')
rangeString = 'bytes=0-' + str(bytesToRead -1) #create byte range as string
rangeDict = {'Range': rangeString} # add this to the dictionary
S3Key.get_contents_to_file(tempfile, headers=rangeDict) # using Boto
tempfile.close()
bytesRead = os.path.getsize(tempFilePath)
print 'Bytes requested = ' + str(bytesToRead)
print 'Bytes recieved = ' + str(bytesRead)
print 'Additional bytes = ' + str(bytesRead - bytesToRead)
Belirli ASCII kaçış karakterleri için bakan ve değiştirerek edilir Boto kodunda şey olduğunu tahmin ve herhangi bulamıyorum Sadece bir ikili dosya olarak ele almak için belirleme yolu.
Benzer bir sorun yaşayan ve çevresinde bir yolu paylaşan var mı?
Teşekkür
Tim
Hangi boto sürümünü kullanıyorsunuz? boto .__ version__' – Alfe
Boto sürüm 2.6'yı kullanma.0 { –
Sadece {'Range': 'bytes = 0-100000'} bit ile doğrudan ilgili olmadığından emin olmak için başka bir şey denedim, bu yüzden get_contents_as_file ile tüm dosyayı indirdikten sonra: Bytes talep edildi = 234630656 = 235363424 Ek bytes = 732768 –