I am writing a firefox extension which involves downloading and merging
Binary (Jpeg) files.
So far I Can download the files, but for some reason am unable to merge
them.
The output (merged file) is always 0 bytes.
(Note I am making use of JSlib to open the file in "binary append"
mode and to write to the file. but even if i use simple xpcom functions
and merely try to read from one file and write to the other, without
merging, i still get the output file to be of 0 Bytes)
The relevent piece of code follows:
var nsIDownloadObserver =
{onDownloadComplete: function(nsIDownloader, nsresult, nsIFile)
{//dump( "\nDownloadComplete" );
alert("Download Complete. Scan " + scanNum + "
downloaded");
var fileOut =
Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
fileOut.initWithPath("C:\\Documents and
Settings\\sina\\Desktop\\image.jpg");
//if the ourput file does not exist (ie this is the first
scan) then create it
if(fileOut.exists()==false)
{fileOut.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0777);}
//the following is code to read and write a binary file.
plz shift this to the xpcomBinaryFileRead/Write functions.
var fileInPath = "file://C:\\Documents and
Settings\\sina\\Desktop\\temp_image.jpg"
var fileOutPath = "file://C:\\Documents and
Settings\\sina\\Desktop\\image.jpg"
var ios =
Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var fileInChannel = ios.newChannel(fileInPath, "", null);
var binaryIS =
Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
binaryIS.setInputStream(fileInChannel.open());
//Open the file in append-binary mode(function from JSLib)
fileOut.open("ab");
fileOut.write(binaryIS.readByteArray(binaryIS.available()));
BinaryIS.close();
//BinaryOS.close();
alert("Scan " + scanNum + " Appended");
}
};
//var nsIDownloadObserver = {onDownloadComplete:
function(nsIDownloader, nsresult, nsIFile) {alert("done!");}};
============================================================================
The Entire Code follows:
function savePrompt(url, savefile, filename, autoLocation)
{
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to save file was denied.");
}
var ios =
Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var fileHandler =
ios.getProtocolHandler("file").QueryInterface(Components.interfaces.nsIFileProtocolHandler);
var nsIFile = fileHandler.getFileFromURLSpec("file://C:\\Documents
and Settings\\sina\\Desktop\\temp_image.jpg");
var outputStream = Components.classes[
"@mozilla.org/network/file-output-stream;1" ].createInstance(
Components.interfaces.nsIFileOutputStream );
var nsIDownloadObserver =
{onDownloadComplete: function(nsIDownloader, nsresult, nsIFile)
{//dump( "\nDownloadComplete" );
alert("Download Complete. Scan " + scanNum + "
downloaded");
var fileOut =
Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
fileOut.initWithPath("C:\\Documents and
Settings\\sina\\Desktop\\image.jpg");
//if the ourput file does not exist (ie this is the first
scan) then create it
if(fileOut.exists()==false)
{fileOut.create(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0777);}
//the following is code to read and write a binary file.
plz shift this to the xpcomBinaryFileRead/Write functions.
var fileInPath = "file://C:\\Documents and
Settings\\sina\\Desktop\\temp_image.jpg"
var fileOutPath = "file://C:\\Documents and
Settings\\sina\\Desktop\\image.jpg"
var ios =
Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
var fileInChannel = ios.newChannel(fileInPath, "", null);
var binaryIS =
Components.classes["@mozilla.org/binaryinputstream;1"].createInstance(Components.interfaces.nsIBinaryInputStream);
binaryIS.setInputStream(fileInChannel.open());
//var fileOutChannel = ios.newChannel(fileOutPath, "",
null);
//var binaryOS =
Components.classes["@mozilla.org/binaryoutputstream;1"].createInstance(Components.interfaces.nsIBinaryOutputStream);
//binaryOS.setOutputStream(fileOutChannel.open());
//var Buffer =
binaryIS.readByteArray(binaryIS.available());
//binaryOS.writeByteArray(buffer,buffer.length);
//binaryOS.flush();
//Open the file in append-binary mode(function from JSLib)
fileOut.open("ab");
fileOut.write(binaryIS.readByteArray(binaryIS.available()));
BinaryIS.close();
//BinaryOS.close();
alert("Scan " + scanNum + " Appended");
}
};
//Figure out which scan to fetch. hardcoded for now
var thUrl = "";
if(scanNum==2) scanNum = 0;
if(scanNum == 1)
{
theUrl = "http://individual.utoronto.ca/arpit/2.jpg";
//theUrl = "http://individual.utoronto.ca/arpit/2.txt";
}
if(scanNum==0)
{
theUrl = "http://individual.utoronto.ca/arpit/1.jpg";
//theUrl = "http://individual.utoronto.ca/arpit/1.txt";
}
scanNum++;
var nsIDownloader =
Components.classes["@mozilla.org/network/downloader;1"].createInstance();
nsIDownloader.QueryInterface(Components.interfaces.nsIDownloader);
nsIDownloader.init( nsIDownloadObserver, nsIFile );
//nsIHttpChannel =
ios.newChannel("http://pschuler.club.fr/Cinema/Actrices/Aishwarya-Rai/aishwarya-rai3.jpg",
"", null);
nsIHttpChannel = ios.newChannel(theUrl, "", null);
nsIHttpChannel.QueryInterface(Components.interfaces.nsIHttpChannel);
nsIHttpChannel.requestMethod = "GET"; // Optional as is default
nsIHttpChannel.asyncOpen( nsIDownloader, nsIFile );
}
_______________________________________________
Mozilla-xpcom mailing list
[email protected]
http://mail.mozilla.org/listinfo/mozilla-xpcom