【问题标题】:Coldfusion8 - Decompressing GZ files using Coldfusion 8Coldfusion8 - 使用 Coldfusion 8 解压缩 GZ 文件
【发布时间】:2011-03-31 17:43:16
【问题描述】:

我每天都会下载一个 GZ 文件,然后我需要解压缩并将内容导入我的数据库表中。

我从 Adob​​e Coldfusion Exchange 找到 CFX_Gzip.dll。有谁知道我把DLL文件放在哪里? 它可能在 CF8/lib/ 文件夹中,但我不确定。

我正在使用 Coldfusion8。如果我应该使用另一个 gzip 解压缩器,如果有一个更新的,我会很高兴。这个是旧的,写它的人的网站现在已经消失了。没有文档。

【问题讨论】:

    标签: coldfusion gzip


    【解决方案1】:

    CF8 不需要 dll,使用现有的 java 库。看看CFLib 或者试试下面的代码:

    <cfscript>
    try{
        /* Set inoutput */
        gzFileName = "myFile.gz";
        outputFile = "mygzFiles";
    
        /* Initialize gzip */
        var outStream = CreateObject("java","java.io.FileOutputStream");
        var inStream = CreateObject("java","java.io.FileInputStream");
        var inGzipStream = CreateObject("java","java.util.zip.GZIPInputStream");
    
        outStream.init(outputFile);
        inStream.init(arguments.gzipFilePath);
    
        inGzipStream.init(instance.ioInput);
    
        while(l GTE 0){
            outStream.write(buffer, 0, l);
            l = inGzipStream.read(buffer);
        }
    
        /* Close the GZip file */
        inGzipStream.close();
        inStream.close();
        outStream.ioOutput.close();
    
    } catch(Any){}
    </cfscript>
    

    【讨论】:

    • 最好不要吞下错误。发生错误时,应关闭流(以确保没有任何东西处于锁定状态)并报告错误。
    • 是的,你是对的。似乎我们都“同步”回答了这个问题:-)
    • 是的。每个人都提出相同的建议,这可能意味着它是正确的答案;)
    【解决方案2】:

    你可以使用一点 java 来处理 gzip 文件 http://www.cflib.org/udf/gzip

    【讨论】:

    • @Sergii - 这怎么可能? ;)
    • @Sergii - 哈哈。那你做得很好。我的大脑更早进入关机模式;)
    【解决方案3】:

    可能不是最优雅的解决方案,但似乎适用于我的简单测试用例:

    <cfscript>
    
        inputFile = "/tmp/test.txt.gz";
        outputFile = "/tmp/test.txt";
    
        ioInput = CreateObject("java","java.io.FileInputStream");
        gzInput = CreateObject("java","java.util.zip.GZIPInputStream");
        ioOutput = CreateObject("java","java.io.FileOutputStream");
    
        ioInput.init(inputFile);
        gzInput.init(ioInput);
        ioOutput.init(outputFile);
    
        line = 0;
        buffer = RepeatString(" ", 1024).getBytes();
    
        while (line GTE 0) {
            ioOutput.write(buffer, 0, line);
            line = gzInput.read(buffer);
        }
    
        gzInput.close();
        ioInput.close();
        ioOutput.close();
    
    </cfscript>
    

    【讨论】:

    • 感谢您的回复。我最终使用了一个名为 CFX_GZIP 的 CFX。