我正在尝试在典型的客户端/服务器交互中发送和接收文件:
- 客户端通过 zip 文件发送。
- 服务器接收并保存它。
客户
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) 文件夹“...”无效。
似乎是一个序列化问题。但是我指定了编码,所以我认为我已经涵盖了它。