javascript - 图片未完全显示在网站上,导致服务器崩溃
问题描述
我在服务器上上传图像然后在现场显示时遇到问题。后端在sailsjs + angular.js 中运行,但我显示图像的模板是预定义的,并且只有js/html。
有两种情况: 1 – 一切正常 2 – 没有正常工作
1)我上传的图片大小为107kb,它完全上传到服务器,应用程序没有关闭,图片显示在网站上
2)我上传的图片大小超过107kb,它上传到服务器已满,应用程序与后端一起重新启动,一半的图片显示在网站上(应用程序崩溃)。
首先,我认为问题出在尺寸上,但是我上传了图像而没有在网站上显示它,并且一切正常。所以问题在于展示它。这是来自此错误的日志。
Error: write after end
at write_ (_http_outgoing.js:627:15)
at ServerResponse.write (_http_outgoing.js:622:10)
at ReadStream.ondata (_stream_readable.js:651:20)
at ReadStream.emit (events.js:180:13)
at ReadStream.emit (domain.js:422:20)
at ReadStream.Readable.read (_stream_readable.js:487:10)
at flow (_stream_readable.js:858:34)
at ServerResponse.<anonymous> (_stream_readable.js:719:7)
at ServerResponse.emit (events.js:180:13)
at ServerResponse.emit (domain.js:422:20)
at Socket.ondrain (internal/http.js:20:44)
at Socket.emit (events.js:185:15)
at Socket.emit (domain.js:422:20)
at onwriteDrain (_stream_writable.js:487:12)
at afterWrite (_stream_writable.js:475:5)
at onwrite (_stream_writable.js:468:7)
此代码用于上传: here
此代码在网站上显示图像:
previewIframe.$('.js-asset img').attr('src', uploadedPath); // tmp path
解决方案
在处理图像(以及所有非视频)的代码中,您有
fs.createReadStream(path).pipe(res);
res.writeHead(200, { 'Content-Type': contentType });
可以将文件通过管道传输到响应,但您需要先编写 HTTP 标头,然后输入数据:
res.writeHead(200, { 'Content-Type': contentType });
fs.createReadStream(path).pipe(res);
或者,使用更明确的词汇:
res.writeHead(200, { 'Content-Type': contentType });
const stream = fs.createReadStream(path);
stream.on('data', stuff => {
res.write(stuff);
});
stream.on('end',() => {
// explicitly close the response
res.end();
});