2016-02-13 60 views
3

我正在製作一個Python Webhook來攔截包含文件附件URL的FormStack數據(以JSON格式發送)。我需要下載文件附件並通過SendGrid API將它作爲郵件附件發送。Python Webhook下載和上傳具有不同擴展名的文件

SendGrid API需要文件名和路徑作爲參數來附加文件。 message.add_attachment('stuff.txt', './stuff.txt')

我提到urllib2但我似乎無法找到一種方式來下載任何擴展名的文件,並獲得其位置進一步上傳。

+0

所以,你需要下載的文件,並將其附加到電子郵件代碼? _你是指_進一步上傳_? – albert

+0

是的,你理解它是正確的。我需要將其附加到電子郵件。最起碼到現在。 – Harvey

+0

你可以看看這個[答案](http://stackoverflow.com/a/22776/3991125)並將讀取/下載的文件保存到一個專用目錄。然後你可以使用'os.path'的函數,或者因爲你知道目錄/路徑,所以甚至可以使用簡單的字符串方法將文件名和擴展名分開(如果需要)並將其添加到消息中。 – albert

回答

0

完整的闡述,爲我工作

import tempfile 
import sendgrid 

url = 'your download url' 
file_name = file_name = url.split('/')[-1] 
t_file = tempfile.NamedTemporaryFile(suffix=file_name, dir="/mydir_loc" delete=False) 

# Default directory is '/tmp' but you can explicitly mention a directory also 
# Set Delete to True if you want the file to be deleted after closing 

data = urllib2.urlopen(url).read() 
t_file.write(data) 

# SendGrid API calls 
message.add_attachment(file_name, tf.name) 
status, msg = sg.send(message) 

t_file.close() 
0

將其下載到臨時文件,例如,使用tempfile
重點線(簡體):

s = urllib2.urlopen(url).read() 
tf = tempfile.NamedTemporaryFile(suffix='.txt', delete=False) # OPT: dir=mytempdir 
tf.write(s) 
path = tf.name 
tf.close() 
相關問題