thanks,
I was actually originally trying to use this piece of code that I found
using java to read through the object, but I am so not a Java person and got
stuck when I needed to add the following parameter:
response.setContentLength(arrayLen(byte_arry_here));
into the script so that the browser knows how much it is downloading...
I tried:
response.setContentLength(arrayLen(instream));
response.setContentLength(arrayLen(byteArray));
response.setContentLength(arrayLen(s_file));
but none worked... So I gave up and decided to use cfffile, until realizing
how large some of the files were. I just wasn't sure if there was something
else I could do with cffile that would make my original code work...
So can someone tell me instead how to call the content length into the
script below please?
<cfscript>
function f_Stream(s_file,i_seek,MIME_TYPE,fileName) {
var i_position = i_seek;
var i_buffer = 10000;
var byteClass = createObject("java", "java.lang.Byte"); //
var byteArray =
createObject("java","java.lang.reflect.Array").newInstance(byteClass.TYPE,
i_buffer);
var context = getPageContext();
var response = context.getResponse().getResponse();
var instream = createObject("java", "java.io.FileInputStream");
var outstream = response.getOutputStream(); // take over control of the
feed to the browser
if(structKeyexists(arguments,"MIME_TYPE"))
response.setContentType(MIME_TYPE);
if(structKeyExists(arguments,"fileName"))
response.setHeader("content-disposition","attachment;
filename=#fileName#");
byteClass.Init(1);
instream.init(s_file);
context.setFlushOutput(false);
try {
if(i_seek GT 0) {
//instream.skip(i_seek);
//outstream.write(toBinary('RkxWAQEAAAAJAAAACQ==')); // output the
header bytes
}
do {
i_length = instream.read(byteArray,0,i_buffer);
if (i_length neq -1) {
outstream.write(byteArray);
outstream.flush();
}
} while (i_length neq -1); // keep going until there's nothing left to
read.
}
catch(any excpt) {}
outstream.flush(); // send any remaining bytes
response.reset(); // reset the feed to the browser
outstream.close(); // close the stream to flash
instream.close(); // close the file stream
}
</cfscript>
<cfset f_Stream("#scene_data.mpeg#",0,"video/mpeg","scene_#scene_id#.mpg")>
----- Original Message -----
From: "Sonny Savage" <[EMAIL PROTECTED]>
To: "CF-Talk" <[email protected]>
Sent: Monday, January 21, 2008 3:07 PM
Subject: Re: Read large binary file, MX7?
> Any time I find a bottleneck with CF tags, I generally go looking for a
> Java
> solution. These pages may have useful snippets...
> http://www.coldfusionmuse.com/index.cfm/2006/10/26/Java.directory.list
> http://java.sun.com/j2se/1.4.2/docs/api/java/io/File.html
> http://www.scripts.com/coldfusion-scripts/file-manipulation-scripts/
>
> On Jan 21, 2008 2:27 PM, Sarah Geren <[EMAIL PROTECTED]> wrote:
>
>> Hello,
>>
>> I have an application which uses CFFILE to read a binary file into a
>> variable, and that variable is used to write out the video to the brower
>> so
>> someone can download it...
>> This code is working great, until the file sizes become too large. It
>> seems to stop working (and returns a null null or 500 null error) when
>> the
>> file sizes go past 200-250MB...
>> There are some files on this server that are up to 1GB in size that have
>> to be downloaded via this script, so it needs to be able to handle pretty
>> big files.
>>
>> The server is MX7, 4GB Ram, and here are my java args:
>>
>> java.args=-server -DJINTEGRA_NATIVE_MODE -DJINTEGRA_PREFETCH_ENUMS
>> -Xms1024m -Xmx1024m -Dsun.io.useCanonCaches=false -XX:MaxPermSize=512m
>> -XX:PermSize=64m -Dcoldfusion.rootDir={application.home}/../ -
>> Dcoldfusion.libPath={application.home}/../lib -XX:+UseConcMarkSweepGC
>> -XX:+UseParNewGC
>> -XX:NewSize=48m -Dcoldfusion.classPath={application.home}/../lib/updates
>> ,{application.home}/../lib,{application.home}/../gateway/lib/,{
>> application.home}/../wwwroot/WEB-INF/cfform/jars
>>
>> Any help would be appreciated!
>> Thanks!
>>
>> <cffile action="readbinary" file="#scene_data.mpeg#" variable="video">
>> <cfheader name="Content-disposition" value="attachment;
>> filename=scene_#scene_id#.mpg">
>> <cfscript>
>> context = getPageContext();
>> context.setFlushOutput(false);
>> response = context.getResponse().getResponse();
>> out = response.getOutputStream();
>> response.setContentType("video/mpeg");
>> response.setContentLength(arrayLen(video));
>> out.write(video);
>> out.flush();
>> response.reset();
>> out.close();
>> </cfscript>
>>
>>
>
>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Adobe® ColdFusion® 8 software 8 is the most important and dramatic release to
date
Get the Free Trial
http://ad.doubleclick.net/clk;160198600;22374440;w
Archive:
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:297031
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe:
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4