我正在尝试从http图片文件上传中读取数据。似乎可以读取文件,但是由于某种原因,输出文件的大小约为原始文件的两倍。
原文:94.7KB
临时文件:168.8 KB
当我在文本编辑器中打开两个文件时,它们的行数相同,并且开始和结束字符相同。这使我相信上载的文件将被保存为字符串而不是二进制数据。
我相信重要的部分如下
读取数据:
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.4.3/css/foundation-float.css">
<div class="row first">
<h1>1. Padding with Rate</h1>
<div class="image-landscape">
<img src="https://dummyimage.com/831x554/404040/fff&text=1" width="831" height="554">
</div>
<div class="image-portrait">
<img src="https://dummyimage.com/369x554/404040/fff&text=2" width="369" height="554">
</div>
</div>
<div class="row second">
<h1>2. Keep Padding</h1>
<div class="image-landscape">
<img src="https://dummyimage.com/831x554/404040/fff&text=1" width="831" height="554">
</div>
<div class="image-portrait">
<img src="https://dummyimage.com/369x554/404040/fff&text=2" width="369" height="554">
</div>
</div>
数据保存:
let body = ''
req.on('data', data => {
body += data.toString()
}).on('end', data => {
if (data) body += data.toString()
// Rest of block
})
这里是数据的完整解析:
// If there is a filename grab the file data
if (result.filename.length > 0) {
// Create a temporary url
let temp = join(os.tmpdir(), (Math.random() * 10000).toString(12).substr(5, 10))
// Get the data between the blocks after the first two newlines
let matches = item.match(/^.+?(\r\n\r\n|\n\n)(.+)/s)
// Write the data to file
fs.createWriteStream(temp).write(matches[2])
}
答案 0 :(得分:0)
所以,我在两种情况下都是正确的...
首先,我必须像这样将数据读取为二进制数据:
body += data.toString('binary')
下一步,保存时,我需要这样保存为二进制数据:
fs.createWriteStream(temp).write(matches[2], 'binary')
这现在保存为正确的文件大小,并且图像可读!