0

我正在尝试在典型的客户端/服务器交互中发送和接收文件:

  1. 客户端通过 zip 文件发送。
  2. 服务器接收并保存它。

客户

const options = {
    hostname: "localhost",
    port: 8080,
    method: "POST",
    headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "Content-Length": fs.statSync("C:/users/Public/file.zip").size
    }
};

const clientRequest = http.request(options, res => {
    res.setEncoding('utf8');

    let data = "";
    res.on("data", (chunk) => {
        data += chunk;
    });

    res.on("end", () => {
        console.log(data);
    });
});

const zipFileStream = fs.createReadStream("C:/users/Public/file.zip");

zipFileStream.on("data", data => {
    clientRequest.write(data, "utf-8");
});

zipFileStream.on("end", () => {
    clientRequest.end(() => {
        console.log("Transmitted!");
    });
});

服务器

http.createServer((req, res) => {
    req.on("data", (data) => {
        console.log(`Data received: ${data}`);

        const dstDir = "C:/users/Public";
        const dstPath = path.join(dstDir, `zip-${Math.ceil(Math.random()*100000)}.zip`);
        const dstStream = fs.createWriteStream(dstPath);
        dstStream.write(data, "utf-8", (error) => {
            if (error) {
                console.log(`Error while trying to save zip into ${dstPath}: ${error}`);
                return;
            }

            utils.log(`Data written into ${dstPath}`);
        });
    });
}).listen(8080);

问题

问题是一切正常,服务器正确接收数据并将流保存到指定文件中。所以最后我在文件系统中得到了一个 zip 文件。当我尝试打开它时:

Windows 无法打开该文件夹。压缩 (zip) 文件夹“...”无效。

似乎是一个序列化问题。但是我指定了编码,所以我认为我已经涵盖了它。

4

0 回答 0