如何使用其API V2(在python中)在Dropbox上上传图片?

时间:2019-07-31 08:11:51

标签: python image dropbox-api

我需要创建一个管道,该管道将从Dropbox中获取图像,对其进行处理并将其上传回(可能是另一个文件夹)。前两个步骤很简单,但是似乎没有办法使用较新的API V2将图像上传到保管箱。我尝试上传本地图像-从计算机读取并将其保存到保管箱,没有成功。问题似乎是文件的格式,出现以下错误:

expected request_binary as binary type

文本文件有很多示例,并且效果很好,而对于图像,相同的解决方案会失败

import dropbox
from PIL import Image

dbx = dropbox.Dropbox('access_token') # Connecting to the account
metadata,file=dbx.files_download('/PATH_TO_IMAGE') # Getting the image from DropBox
im=Image.open(io.BytesIO(file.content)) # Getting the image to process

dbx.files_upload(im, '/PATH', mode=WriteMode('overwrite'))

也尝试过:

dbx.files_upload_session_start(im)

Python3,Dropbox SDK 9.4.0 实际上,我尝试过以各种格式放置文件,因此除了im之外,还有im.read(),np.array(im.getdata())。encode(),io.BytesIO(),计算机中的本地图像但没有任何效果。而且我不明白如何将图像数据转换为“ request_binary作为二进制类型”。

所以我所需要的是一种将任何文件转换为'request_binary'的方法

TypeError: expected request_binary as binary type, got <class --SMTH ELSE-->

1 个答案:

答案 0 :(得分:0)

多亏了格雷格,我找到了一个解决方案,比示例中写的要简单

image=Image.open('1.png') # any image
l=np.array(image.getdata()) 

# To transform an array into image using PIL:

l=l.reshape(im.height,im.width,3).astype('uint8') # unit8 is necessary to convert
im = Image.fromarray(l).convert('RGB')

# to transform the image into bytes:

with io.BytesIO() as output:
    im.save(output, format="PNG")
    contents = output.getvalue()

# After the transformation into bytes the function works normally

dbx.files_upload(
                contents, '/FOLDER/IMAGE.png', dropbox.files.WriteMode.add,
                mute=True)