如何根据请求散列和下载图像?

时间:2018-12-09 17:49:49

标签: node.js http async-await buffer node-request

情况

我要实现的是将图像下载到缓冲区中,对其进行哈希处理,然后保存。

之前,我无法写入磁盘。

代码(在Promise中)

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字节?他们的意思是什么?否则图像标题看起来就可以了。

fdfdfdfd

Edit3:删除那些字节不能解决问题:/也许是罪魁祸首?我已经尝试将其更改为UTF-8,到目前为止还没有运气。

Edit4:快速比较!第一个使用我的程序下载,第二个使用Chrome。

comparison

目录结构

我知道,SHA-256哈希长度为64个字符。为了简单起见,我将使用8个字符。

给出哈希值0123abcd,创建目录01(如果目录不存在(slice(0,2)),然后将文件命名为23abcd({{1 }})中。我已经在很多缓存中看到了这种结构。

示例:

slice(2)

1 个答案:

答案 0 :(得分:0)

根据https://github.com/request/request#requestoptions-callback

  

如果需要二进制数据,则应设置encoding: null

所以对我来说就是request(url, { encoding: null }, (e, resp, body) => {...})

在这种情况下,图像非常精细且可读性:)