情况
我想实现的是,将一个图像下载到缓冲区,对其进行散列,
然后
省省吧。
我无法写入磁盘
之前
散列。
代码(在承诺中)
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文件,以(此处为两个随机字节)开头
编辑2:这是什么??四个0xfd字节?这是什么意思?否则,图像标题看起来正常。
Edit3:删除这些字节并不能解决问题:/也许编码是罪魁祸首?我试着把它改成
UTF-8
到目前为止运气不好。
Edit4:快速比较!第一个是用我的程序下载的,第二个是Chrome。
目录结构
我知道,我知道,SHA-256哈希值有64个字符长。为了简单起见,我将使用8个字符。
考虑到散列
0123abcd
,创建目录
01
(如果它不存在(
slice(0,2)
),然后将文件名
23abcd
(
slice(2)
)在里面。我在很多缓存中见过这种结构。
例子:
01/
23abcd
45abcd
ab/
cdef01
010101