我正在尝试下载二进制文件,并将其原始名称保存在磁盘(linux)上。
有什么想法吗?
import requests
params = {'apikey': 'xxxxxxxxxxxxxxxxxxx', 'hash':'xxxxxxxxxxxxxxxxxxxxxxxxx'}
response = requests.get('https://www.test.com/api/file/download', params=params)
downloaded_file = response.content
if response.status_code == 200:
with open('/tmp/', 'wb') as f:
f.write(response.content)
答案 0 :(得分:1)
根据您在注释中的澄清,您的问题是您想要保留文件的原始名称。
如果URL指向原始二进制数据,则URL的最后一部分将是其“原始名称”,因此您可以通过如下解析URL来获得该名称:
local_filename = url.split('/')[-1]
将其付诸实践,并考虑问题的上下文,以下代码正是您所需要的代码,它是从another SO question复制而来的:
local_filename = url.split('/')[-1]
# NOTE the stream=True parameter
r = requests.get(url, stream=True)
with open(local_filename, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
#f.flush() commented by recommendation from J.F.Sebastian
return local_filename
无法将此内容发表为评论,因此必须将其放入答案中。我希望我已经足够清楚了。告诉我代码是否有问题。问题解决后,请同时通知我,以便我可以删除它,因为它已经得到答复。
编辑
以下是您的代码的版本:
import requests
url = 'https://www.test.com/api/file/download'
params = {'apikey': 'xxxxxxxxxxxxxxxxxxx', 'hash':'xxxxxxxxxxxxxxxxxxxxxxxxx', 'stream':True}
response = requests.get(url, params=params)
local_filename = url.split('/')[-1]
totalbits = 0
if response.status_code == 200:
with open(local_filename, 'wb') as f:
for chunk in response.iter_content(chunk_size=1024):
if chunk:
totalbits += 1024
print("Downloaded",totalbits*1025,"KB...")
f.write(chunk)
注意:如果您不希望它显示进度,只需删除第15行上的print
语句即可。使用以下URL进行了测试:https://imagecomics.com/uploads/releases/_small/DeadRabbit-02_cvr.jpg,它似乎运行得很好。再次,如果您有任何问题,请在下面留言。