- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个大文件 (500 Mb-1Gb) 存储在 HTTP(S) 位置
(比如 https://example.com/largefile.zip
)。
我对 FTP 服务器有读/写权限
我有普通用户权限(没有 sudo)。
在这些限制下,我想通过请求从 HTTP URL 读取文件并将其发送到 FTP 服务器,而无需先写入磁盘。
所以通常情况下,我会这样做。
response=requests.get('https://example.com/largefile.zip', stream=True)
with open("largefile_local.zip", "wb") as handle:
for data in response.iter_content(chunk_size=4096):
handle.write(data)
然后将本地文件上传到FTP。但我想避免磁盘 I/O。我无法将 FTP 挂载为 fuse 文件系统,因为我没有 super 用户权限。
理想情况下,我会做类似ftp_file.write()
的事情,而不是handle.write()
。那可能吗? ftplib 文档似乎假定只会上传本地文件,而不是 response.content
。所以理想情况下我想做
response=requests.get('https://example.com/largefile.zip', stream=True)
for data in response.iter_content(chunk_size=4096):
ftp_send_chunk(data)
我不确定如何编写 ftp_send_chunk()
。
这里有一个类似的问题(Python - Upload a in-memory file (generated by API calls) in FTP by chunks)。我的用例需要从 HTTP URL 中检索一个 block 并将其写入 FTP。
P.S.:答案中提供的解决方案(围绕 urllib.urlopen 的包装器)也适用于 Dropbox 上传。我在使用我的 ftp 提供商时遇到了问题,所以最终使用了 dropbox,它工作可靠。
请注意,Dropbox 在 api 中有一个“添加网络上传”功能,它可以做同样的事情(远程上传)。这只适用于“直接”链接。在我的用例中,http_url 来自 i.p. 的流媒体服务。受限制的。因此,此解决方法变得必要。这是代码
import dropbox;
d = dropbox.Dropbox(<ACTION-TOKEN>);
f=FileWithProgress(filehandle);
filesize=filehandle.length;
targetfile='/'+fname;
CHUNK_SIZE=4*1024*1024
upload_session_start_result = d.files_upload_session_start(f.read(CHUNK_SIZE));
num_chunks=1
cursor = dropbox.files.UploadSessionCursor(session_id=upload_session_start_result.session_id,
offset=CHUNK_SIZE*num_chunks)
commit = dropbox.files.CommitInfo(path=targetfile)
while CHUNK_SIZE*num_chunks < filesize:
if ((filesize - (CHUNK_SIZE*num_chunks)) <= CHUNK_SIZE):
print d.files_upload_session_finish(f.read(CHUNK_SIZE),cursor,commit)
else:
d.files_upload_session_append(f.read(CHUNK_SIZE),cursor.session_id,cursor.offset)
num_chunks+=1
cursor.offset = CHUNK_SIZE*num_chunks
link = d.sharing_create_shared_link(targetfile)
url = link.url
dl_url = re.sub(r"\?dl\=0", "?dl=1", url)
dl_url = dl_url.strip()
print 'dropbox_url: ',dl_url;
我认为甚至应该可以通过他们的 python api 使用 google-drive 来做到这一点,但是使用凭据和他们的 python 包装器对我来说太难了。检查这个1还有这个2
最佳答案
urllib.request.urlopen
应该很容易,因为它返回一个类似文件的对象,您可以直接将其与 FTP.storbinary
一起使用.
ftp = FTP(host, user, passwd)
filehandle = urllib.request.urlopen(http_url)
ftp.storbinary("STOR /ftp/path/file.dat", filehandle)
如果你想监控进度,实现一个包装类文件对象,它将委托(delegate)对 filehandle
对象的调用,但也会显示进度:
class FileWithProgress:
def __init__(self, filehandle):
self.filehandle = filehandle
self.p = 0
def read(self, blocksize):
r = self.filehandle.read(blocksize)
self.p += len(r)
print(str(self.p) + " of " + str(self.p + self.filehandle.length))
return r
filehandle = urllib.request.urlopen(http_url)
ftp.storbinary("STOR /ftp/path/file.dat", FileWithProgress(filehandle))
对于 Python 2 使用:
urllib.urlopen
,而不是 urllib.request.urlopen
。filehandle.info().getheader('Content-Length')
而不是 str(self.p + filehandle.length)
关于Python - 将文件从 HTTP(S) URL 传输到 FTP/Dropbox 而无需磁盘写入(分块上传),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53544969/
假设我拥有域 mydomain.com,并且我在服务器上有一个 Web 应用程序,网址为 http://99.99.99.99:1234/MyApplication/startpage.somethi
我正在尝试通过以下方式更新已解析的 URL: u, _ := url.Parse(s) if u.Scheme == "" { u.Scheme = "https" } if u.Path =
如何将 www.somesite.com/api(.*) 映射到 www.somesite.com/$1:9000? (我需要将/api 映射到运行 @ 端口 9000 的 Play 框架应用程序)
我有一个资源结构,如航类 > 座位 > 预订,所以预订属于某个航类的某个座位: http://example.com/jdf_3prGPS4/1/jMBDy46PbNc
我想知道以下网址是否有效。 路径中的点,在主机之后: http://www.example.com/v.b.w..com 主机中的点,作为子域的一部分: http://v.b.w..co.manufa
我有两个域 - crmpicco.co.uk 和 ayrshireminis.com - 如果我浏览到: www.crmpicco.co.uk/mini/new我希望能够重定向到 www.ayrshi
我正在尝试使用 URL 重写和应用程序请求路由来重写到外部 URL。我设置了以下规则: 在规则中,“patternToMatch”是我试
我已经安装了带有 SharePoint 和 Url Rewrite 模块的 IIS 7.0。 是以下句子还是我配置错误才能看到这个结果? Url Redirect 可以将 url 重定向到任何内部(在
我想知道,为了获得良好的 SEO,您必须在 URL 中使用自然语言。您知道字符中单词或短语的最大大小吗?例如: www.me.com/this-is-a-really-long-url.htm 我问这
有人知道在 SEO 友好 URL 中使用逗号有什么问题吗?我正在使用一些在其 SEO 友好 URL 中使用大量逗号的软件;但我 100% 肯定我见过一些程序/平台无法正确识别 URL 并在第一个逗号后
我有一个网站,我正在为所有链接使用干净的 URL。我想知道对于简短的基本 URL 与较长的描述性 URL 有何看法。 例如,如果我的网站是关于 Georgia Bulldog 足球新闻的,那么哪个网站
我正在编写一个类似于 tinyurl 的 URL 缩短器,我想知道如何跟踪已经使用我的服务缩短的 URL?例如,tinyurl 为相同的长 URL 生成相同的小 URL,而不管是谁创建的。如
我是 magento 的新手。我正在开发一个模块。为此,我有一些要显示链接的 css 和 js 文件。我目前有类似 的链接 getSkinUrl('module_tryouts/css/jquery.
我想基于 HTTP_URL 重写 URL 以重定向到不同的端口,同时保留其余的 URL 和查询字符串(如果指定)。例如, http://host/john/page.aspx 应该重定向到 http:
我遇到了以下问题: 我的 Grails (2.2.0) 应用程序具有以下 URL 映射: "/api/clientQuote/$labcode/$cliCode/$quoCode"(controlle
我有一个很长的 URL,它不适合 URL 字段。它一直在修剪。该怎么办?有没有办法增加 SharePoint 2010 中的 URL 字段字符限制? 或者解决方法来容纳长 URL。例如,以下 URL
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我正在编写一些文档,但遇到了一些词汇问题: http://www.example.com/en/public/img/logo.gif 被称为“绝对”网址,对吗? ../../public/img/l
我们从客户以前的开发人员那里继承了相当多的 Google Apps 脚本项目。 Apps 脚本通过嵌入式小部件部署在 Google 网站 (sites.google.com) 的各个页面上。每当我们需
我是一名优秀的程序员,十分优秀!