Python3:How 保持活动状态 dropbox.files_upload() 。那么要同时下载和上传吗?
Python3:How to keep-alive dropbox.files_upload() . So to download and upload at the same time?
我想从 Internet 下载一个文件,同时将其上传到 Dropbox。我正在以块的形式下载文件,并且在每个完成的块之后我希望它将它上传到保管箱。
import multiprocessing as m
import requests as rr
import dropbox
url='http://www.onirikal.com/videos/mp4/battle_games.mp4'
db=dropbox.Dropbox(Accesstoken)
def d(url):
r=rr.get(url,stream=True)
with open('file.mp4','wb')as f:
for a in r.iter_content(chunk_size=1000000):
if a:
f.write('')
f.write(a)
def u():
try:
with open('file.mp4','rb')as ff:
db.files_upload(ff.read(),'/file.mp4')
except FileNotFoundError:
pass
if __name__=='__main__':
p=m.Pool()
re= p.apply_async(d,[url])
ree=p.apply_async(u)
re.get(timeout=10)
ree.get(timeout=10)
但是上传的文件大小为0字节
编辑
我正在使用 f.write('')
在服务器上保存 space,因为我只有 512mb 作为存储
你不应该为此使用多处理。相反,只需像您已经在做的那样下载块,然后立即调用 upload_chunk(a, len(a), offset, upload_id)
。您不需要磁盘上的临时文件。
我想你可以这样做
r=rr.get(url,stream=True)
db.files_upload(r.content,'/file.mp4')
不做文件直接上传。如果您想以流或块的形式上传,我想您需要执行以下操作:
from io import BytesIO
import requests
import dropbox
client = dropbox.client.DropboxClient(access_token)
r = requests.get(url, stream=True)
with BytesIO(r.content) as bytes_stream:
client.get_chunked_uploader(bytes_stream, len(r.content))
while uploader.offset < len(r.content):
try:
upload = uploader.upload_chunked()
except dropbox.rest.ErrorResponse, e:
# perform error handling and retry logic
uploader.finish('/file.mp4')
我无法验证这两种方法,因为我目前无法安装 Dropbox 模块,因此您可能需要进行一些调整。
我想从 Internet 下载一个文件,同时将其上传到 Dropbox。我正在以块的形式下载文件,并且在每个完成的块之后我希望它将它上传到保管箱。
import multiprocessing as m
import requests as rr
import dropbox
url='http://www.onirikal.com/videos/mp4/battle_games.mp4'
db=dropbox.Dropbox(Accesstoken)
def d(url):
r=rr.get(url,stream=True)
with open('file.mp4','wb')as f:
for a in r.iter_content(chunk_size=1000000):
if a:
f.write('')
f.write(a)
def u():
try:
with open('file.mp4','rb')as ff:
db.files_upload(ff.read(),'/file.mp4')
except FileNotFoundError:
pass
if __name__=='__main__':
p=m.Pool()
re= p.apply_async(d,[url])
ree=p.apply_async(u)
re.get(timeout=10)
ree.get(timeout=10)
但是上传的文件大小为0字节
编辑
我正在使用 f.write('')
在服务器上保存 space,因为我只有 512mb 作为存储
你不应该为此使用多处理。相反,只需像您已经在做的那样下载块,然后立即调用 upload_chunk(a, len(a), offset, upload_id)
。您不需要磁盘上的临时文件。
我想你可以这样做
r=rr.get(url,stream=True)
db.files_upload(r.content,'/file.mp4')
不做文件直接上传。如果您想以流或块的形式上传,我想您需要执行以下操作:
from io import BytesIO
import requests
import dropbox
client = dropbox.client.DropboxClient(access_token)
r = requests.get(url, stream=True)
with BytesIO(r.content) as bytes_stream:
client.get_chunked_uploader(bytes_stream, len(r.content))
while uploader.offset < len(r.content):
try:
upload = uploader.upload_chunked()
except dropbox.rest.ErrorResponse, e:
# perform error handling and retry logic
uploader.finish('/file.mp4')
我无法验证这两种方法,因为我目前无法安装 Dropbox 模块,因此您可能需要进行一些调整。