新人求助:我通过微信接口获取客户发送的大图片(HTTP流通过data事件分批发送),为啥用fs.appendFile经常发生图片花的情况?
发布于 13 年前 作者 xuhaijinsky2008 8585 次预览 最后一次回复是 13 年前 来自
新人求助:我通过微信接口获取客户发送的大图片(HTTP流通过data事件分批发送),为啥用fs.appendFile经常发生图片花的情况?
同一张图片当多个data的数据同时写入这个文件的时候,图片就会花掉
resHttps.on('data', function (body) {
fs.appendFile(filePath, body, "utf8", function (err) {
是不是要用同步才行?



12 回复
不明白为什么
fs.appendFile(filePath, body, "utf8", function (err) {这里要加个utf8去掉就可以?
fs.appendFile(filename, data, encoding=‘utf8’, [callback])# Asynchronously append data to a file, creating the file if it not yet exists. data can be a string or a buffer. The encoding argument is ignored if data is a buffer.
Example:
fs.appendFile(‘message.txt’, ‘data to append’, function (err) { if (err) throw err; console.log(‘The “data to append” was appended to file!’); });
@xuhaijinsky2008 试试
fs.createWriteStream(path, [options])http://nodejs.org/api/fs.html#fs_fs_createwritestream_path_options例如
fs.appendFile不能保证数据按调用顺序添加到文件里。测试代码(不知道为什么执行这段代码会报错……):cat /tmp/appendTest结果中出现:node 处处都是异步~~
用WriteStream来写入文件,可以保证顺序
发现改成同步调用,也会出现图片花的情况。
果然用pipe可以解决图片花的问题,请问什么时候pipe完,因为我要等图片生成后通知客户端去取。是resp.on(‘end’, function () {这个事件吗?
@leizongmin 这个可以的~~
@xuhaijinsky2008 是的
@xuhaijinsky2008 我最近用fs.appendFile保存图片也出现了这个问题,保存过程中也注意了数据的顺序问题,可是依然有问题,后来只好用writestream