이 질문에 업로드하기 전에 이미지의 크기를 읽을 수 있습니다.파이썬 Flask-은 어떻게 당신이 <code>Python Flask</code>, <code>Boto3</code>, <code>Pillow</code> (일명, <code>PIL</code>) 약간의 경험이있는 경우, 매우 간단 수 있습니다 아마존 S3
내가 (단지 .jpg
, .jpeg
, .tif
을 허용하는) 클라이언트로부터 들어오는 영상을 수신하기 위해 시도하고있어 내가 Boto3
를 사용하여 아마존 S3에 업로드하기 전에 이미지의 크기를 읽고 싶습니다.
코드는 똑바로 앞으로 상당히입니다 :
file = request.files['file']
# produces an instance of FileStorage
asset = models.Asset(file, AssetType.profile_img, donor.id)
# a model managed by the ORM
img = Image.open(BytesIO(file.stream.read()))
# produces a PIL Image object
size = img.size
# read the size of the Image object
asset.width = size[0]
asset.height = size[1]
# set the size to the ORM
response = s3.Object('my-bucket', asset.s3_key()).put(Body=file)
# upload to S3
여기에, 나도 (A) 이미지 OR (B) S3에 업로드를 읽을 수 캐치하지만 둘 다 할 수 없습니다. 문자 그대로, 하나 또는 다른 것을 주석 처리하는 것은 원하는 작업을 생성하지만, 두 가지를 조합하여 생성 할 수는 없습니다.
나는 그것을 업로드로 좁혔다. 어딘가에있는 file.strea.read() 작업으로 인해 Boto3 업로드에 문제가 발생한다고 생각합니다. 그러나 그 사실을 알 수는 없습니다. 너는 할수 있니?
미리 감사드립니다.
아마 스트림의 끝 부분에 있습니다. 그런 일이 발생하면, boto의 관점에서 보내야 할 더 이상의 바이트가 없습니다. 파일이 메모리에 저장 될 수 있다면 BytesIO를 중개자로 사용해 볼 수 있습니다. 이렇게하면 스트림 포인터를 재설정하여 수표를 업로드 한 후 업로드 할 수 있습니다. https://docs.python.org/3/library/io.html#binary-i-o – killthrush
@killthrush 훌륭한 제안, 이것은 또한 내 최고의 가정입니다. 어떻게 수정해야합니까? – achi