用Python将大文件上传到Heroku
我正在写一个Python脚本,用来把音频文件上传到一个API。这个脚本大部分功能都正常,但因为我把应用放在Heroku上,上传大文件时似乎会受到Heroku的内存限制。我试过使用multipart/form-data这种方式,但好像还是不够。我上传超过大约5分钟的音频文件时,总是会出现503错误。
import requests
import os
import glob
from requests_toolbelt import MultipartEncoder
token = 'XXXX'
headers = {'Authorization': 'Bearer ' + token, 'Content-Type': 'application/json'}
base_url = 'https://test.com/api/'
for file in glob.glob("*.mp3"):
files = MultipartEncoder(fields={'file': (file, open(file, "rb"), 'audio/mpeg')})
audio_headers = {'Authorization': 'Bearer ' + token, 'Content-Type': files.content_type}
add_file = requests.post(base_url, headers=audio_headers, data=files)
1 个回答
1
Heroku对所有请求有30秒的限制。如果你上传的文件比较大,肯定会超过这个时间限制,这样请求就会超时。解决这个问题的办法就是直接从浏览器把文件上传到第三方存储服务(比如亚马逊的S3),然后再把上传后文件的位置发给Heroku。通过使用后台处理,你就可以下载这个文件,并按照自己的需要进行处理。