gpt4 book ai didi

coldfusion - 使用CFHTTP在ColdFusion中下载大文件

转载 作者:行者123 更新时间:2023-12-04 13:21:07 25 4
gpt4 key购买 nike

我正在尝试在Coldfusion 8上使用CFHTTP将较大的(600MB)二进制文件下载到服务器:

<cfhttp 
method="get"
url="#fileURL#"
path="#filePath#"
file="#fileName#"
timeout="600"
getasbinary="auto"
>

对于较小的文件(大约100兆MB),它工作正常,但对于较大的文件,我却收到服务器500错误:“java.lang.OutOfMemoryError:Java堆空间”。

该文件是从Dropbox文件夹下载的-因此唯一可用的选项是使用HTTP GET。

有谁知道如何下载它,这样就不会杀死服务器或超时?

最佳答案

您可以通过从CF代码调用Java来做到这一点。缓冲的输入和输出流分类器旨在保留数据块(而不是整个数据),以避免OutOfMemory错误。
getByteArray()是一个辅助方法,因为无法在CF中直接声明类似byte buf[]=new byte[1024];的内容。

在示例中,更改sourcedestination变量。

示例

<cfset source = 'protocol://domain/path/to/file.ext'>
<cfset destination = getDirectoryFromPath(getCurrentTemplatePath()) & listlast(source, "/")>
<cffunction name="getByteArray" access="private" returnType="binary" output="no">
<cfargument name="size" type="numeric" required="true"/>
<cfset var emptyByteArray =
createObject("java", "java.io.ByteArrayOutputStream").init().toByteArray()/>
<cfset var byteClass = emptyByteArray.getClass().getComponentType()/>
<cfset var byteArray =
createObject("java","java.lang.reflect.Array").newInstance(byteClass, arguments.size)/>
<cfreturn byteArray/>
</cffunction>

<cfscript>
uri = createObject("java", "java.net.URL").init(source);
uis = uri.openStream();
bis = createObject("java", "java.io.BufferedInputStream").init(uis);
fos = createObject("java", "java.io.FileOutputStream").init(destination);
bos = createObject("java", "java.io.BufferedOutputStream").init(fos);
buffer = getByteArray(1024);
len = bis.read(buffer);
while(len > 0) {
bos.write(buffer,0,len);
len = bis.read(buffer);
}
bos.close();
bis.close();
fos.close();
uis.close();
</cfscript>

关于coldfusion - 使用CFHTTP在ColdFusion中下载大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4738610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com