92076


[node-gzip](https://www.npmjs.com/package/node-
gzip)でJavaScriptでファイルを圧縮してサーバーに転送を考えています。  
このページの下記のように（＜READMEより抜粋＞参照）、テキストをインプットとした場合の記載があります。  
（ここでは'Hello World'）  
このテキストの部分をファイルを指定して、圧縮したいので、'Hello World'をfileA.txtのように置き換えたのですがエラーになりました。  
大変初歩的な質問で恐縮ですが、ご教授いただければと思います。

＜READMEより抜粋＞

[code]

    const {gzip, ungzip} = require('node-gzip');
    const compressed = await gzip('Hello World');
    const decompressed = await ungzip(compressed);
    console.log(decompressed.toString());        //Hello World
    
[/code]


CC BY-SA 4.0
2022-11-08T01:46:46.427
92075
2022-11-08T06:23:57.963
2022-11-08T02:15:09.267
3054
55269
question
javascript node.js gzip
ファイルの内容を読み込みnode-gzipで利用したい


`node-gzip` は [README](https://github.com/Rebsos/node-gzip#description) によると、

> `Buffer | TypedArray | DataView | ArrayBuffer | string`

を受け付けます。[fs.readFile](https://nodejs.org/api/fs.html#fsreadfilepath-options-
callback) がファイルの内容を `string` か `Buffer` で返すので、これでよさそうです。

[code]

    const fs = require('node:fs/promises');
    const { gzip, ungzip } = require('node-gzip');
    
    ;(async function() {
        const data = await fs.readFile("hello.txt");
        const compressed = await gzip(data);
        const decompressed = await ungzip(compressed);
        console.log(decompressed.toString());
    })()
    
[/code]

* * *

接頭辞 `node:` が使えないバージョンの Node.js
を使用している場合は、下のように接頭辞を付けずにモジュールを指定します。ただし、`/promises` は削りません。

[code]

    const fs = require('fs/promises');
    
[/code]

* * *

### クライアント（ブラウザ）側で動かしたい場合

それは無理です。  
クライアント（ブラウザ）に Node.js の API は実装されていません。 ですから、`zlib` モジュールも、それに依存している `node-
gzip` モジュールも動きません。 `fs` モジュールに関してはセキュリティーやプライバシーを考えれば解り易いと思います。
ファイル名を指定してユーザーのマシンのファイルを読み書きできてしまうと大変な事です。

そういう訳ですから、質問の通りの構成ですとあきらめるしかありません。ただ、

  * ユーザーにファイルを送信してもらう
  * その際、圧縮してもらう

という事がまったく不可能というわけでは有りません。「ファイル（やデータ）の
POST」といったキーワードで検索してみて下さい。（圧縮のことは一旦忘れて完成させた方がよいでしょう）


CC BY-SA 4.0
2022-11-08T02:12:48.470
92076
2022-11-08T06:23:57.963
2022-11-08T06:23:57.963
3054
3054
92075
answer