我要实现的是将图像下载到缓冲区中,对其进行哈希处理,然后保存。
在之前,我无法写入磁盘。
const filename = this.getPathFromHash(hash);
if (!fs.existsSync(path.dirname(filename))) fs.mkdirSync(path.dirname(filename));
fs.writeFile(filename, body, 'binary', (e) => {
if (e) reject(e);
parser.MediumVersion.create({
hash, url, type, size, width, height,
}).then(resolve).catch(reject);
});
文件损坏,但它创建了文件:)
编辑:IrFanView说它是JPEG,扩展名不正确,然后只是说不是一个jpeg文件,开头(此处为两个随机字节)
Edit2:这是什么?四个0xfd字节?他们的意思是什么?否则图像标题看起来就可以了。
Edit3:删除那些字节不能解决问题:/也许是罪魁祸首?我已经尝试将其更改为UTF-8
,到目前为止还没有运气。
Edit4:快速比较!第一个使用我的程序下载,第二个使用Chrome。
我知道,SHA-256哈希长度为64个字符。为了简单起见,我将使用8个字符。
给出哈希值0123abcd
,创建目录01
(如果目录不存在(slice(0,2)
),然后将文件命名为23abcd
({{1 }})中。我已经在很多缓存中看到了这种结构。
slice(2)
答案 0 :(得分:0)
根据https://github.com/request/request#requestoptions-callback:
如果需要二进制数据,则应设置
encoding: null
。
所以对我来说就是request(url, { encoding: null }, (e, resp, body) => {...})
。
在这种情况下,图像非常精细且可读性:)