使用 CFHTTP 在 ColdFusion 中下载大文件
我正在尝试在 Coldfusion 8 上使用 CFHTTP 将大型(600MB)二进制文件下载到服务器:
<cfhttp
method="get"
url="#fileURL#"
path="#filePath#"
file="#fileName#"
timeout="600"
getasbinary="auto"
>
它对于较小的文件(100MB)工作正常,但对于大型文件,我收到服务器 500 错误:“java.lang .OutOfMemoryError:Java 堆空间”。
该文件是从 Dropbox 文件夹下载的 - 因此唯一可用的选项是使用 HTTP GET。
有谁知道如何下载它,这样它就不会杀死服务器或超时?
I'm trying to download a large (600MB) binary file to the server using CFHTTP on Coldfusion 8:
<cfhttp
method="get"
url="#fileURL#"
path="#filePath#"
file="#fileName#"
timeout="600"
getasbinary="auto"
>
It's working fine for smaller files (100something MB) but for the large one's I'm getting the Server 500 error: "java.lang.OutOfMemoryError: Java heap space".
The file is being downloaded from a Dropbox folder - so only available option is to use HTTP GET.
Does anyone have idea how to download it, so it wouldn't kill the server or timeout?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过从 CF 代码调用 Java 来完成此操作。缓冲输入和输出流类被设计为保存数据块,而不是整个数据,从而避免 OutOfMemory 错误。
getByteArray()
是一个辅助方法,因为无法直接在 CF 中声明byte buf[]=new byte[1024];
之类的内容。在示例中更改
source
和destination
变量。示例
You can do this by calling Java from CF code. The buffered input and output stream classees are designed to hold onto chunks of data, rather than the whole thing, avoiding OutOfMemory errors.
getByteArray()
is a helper method because there's not way to declare something likebyte buf[]=new byte[1024];
in CF directly.In the example change the
source
anddestination
variables.Example
问题是它太大了。 ColdFusion 在将其写入磁盘之前将整个内容读取到内存中。
您最好使用其他方法来获取该文件。 wget 可以从命令行执行 http 请求。明智地使用 CFEXECUTE 可能是一个好方法。
The problem is is that it's too large. ColdFusion reads the entire thing into memory before writing it to disk.
You'll be better off using some other method to get the file. wget can do http requests from a command-line. That with judicious use of CFEXECUTE is probably a good way to go.