我正在使用下面的python代码上传一个文件到我们的营销自动化工具Marketo。当我把文件下载到本地(hometyronDownloadsyoda.jpeg)时,它可以工作,但我希望能够直接从Dropbox上传文件到Marketo,而不必在中间下载,因为我将在Zapier中托管这个代码。
当给定dropbox文件的链接时,最好的上传方式是什么?
import requests
url = "xxxxxx/rest/asset/v1/files.json"
payload = {'name': 'test',
'file': '/home/tyron/Downloads/yoda.jpe',
'folder': '{"id":367,"type":"Folder"}'}
files = [
('file', open('/home/tyron/Downloads/yoda.jpeg','rb'))
]
headers = {
'Authorization': 'Bearer yyyyyyyy'
}
response = requests.request("POST", url, headers=headers, data = payload, files = files)
print(response.text.encode('utf8'))
感谢评论中Greg的建议,我能够使用dropbox的临时链接端点将文件上传到Marketo。
获取Dropbox端点的Python代码
import re
from urllib.parse import urlparse
from urllib.parse import unquote
import requests
import json
link = "https://www.dropbox.com/preview/Telnyx/...../file"
path = urlparse(link).path
path = re.search("(/Telnyx.*$)",path).group(0).lower()
path = unquote(path)
print(path)
url = "https://api.dropboxapi.com/2/files/get_temporary_link"
payload = {"path": path}
headers = {
'Authorization': 'Bearer xxxxxxxxxxxxxx',
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data = json.dumps(payload))
print(response)
link = re.search('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+', response.text).group(0)
return {'id': 1234, 'rawHTML': link}
上传到Marketo的Python代码
import requests
import urllib
import json
import re
path = "https://dl.dropboxusercontent.com/apitl/1/......." #returned from previous function
f = urllib.request.urlopen(path)
mime_type = f.info().get_content_type()
f_ext = f.info().get_content_type().split("/")[1]
url = "https://xxx-xxx-xxx.mktorest.com/rest/asset/v1/files.json"
f_name = 'Name.' + f_ext
payload = {
'folder': '{"id":xxxx","type":"Folder"}'
}
headers = {
'Authorization': 'Bearer xxxxxxxx'
}
files = {'file': (f_name, f, mime_type)}
response = requests.request("POST", url, headers=headers, data = payload, files = files)
print(response.text.encode('utf8'))
f_url = re.search('"url":"(.*)","folder',response.text).group(1)
return {'id': 1234, 'rawHTML': f_url}