我正在使用Webpack的React项目中使用EvaporateJS。
如documentation中所述,我使用了以下内容:
(我不想使用aws-sdk,因为btw正常工作的软件包大小)
cryptoMd5Method: function (data) {
return crypto.createHash('md5').update(data).digest('base64');
}
但是'data'是ArrayBuffer的类型。所以我尝试将其转换为字符串。
cryptoMd5Method: function (data) {
var enc = new TextDecoder();
var dataString = enc.decode(data);
var computed = crypto.createHash('md5').update(dataString).digest('base64');
return computed ;
}
但这不能正确计算摘要。
那么,对此的解决方案(考虑nodejs crypto选项)应该是什么?
或者,如何仅导入AWS.util.crypto
模块而不引用整个aws-sdk
呢?这将帮助我使捆绑包保持较小。
答案 0 :(得分:1)
1)导入与浏览器兼容的软件包:
import MD5 from 'js-md5';
import { sha256 as SHA256 } from 'js-sha256';
2)声明功能:
const md5 = (x) => { const o = MD5.create(); o.update(x); return o.base64(); };
const sha256 = (x) => { const o = SHA256.create(); o.update(x); return o.hex(); };
3)在配置中的用法:
...
computeContentMd5: true,
cryptoMd5Method: (_) => md5(_),
cryptoHexEncodedHash256: (_) => sha256(_),
...
答案 1 :(得分:0)
整个aws-sdk确实很大,但是对于前端(浏览器),您可以构建一个较小的工件,其中仅包含您需要的东西。 按照amazon docs - Building the SDK for Browsers上的说明进行操作。
有关将ArrayBuffer转换为字符串以将其传递给哈希算法的update()
方法的信息,请参见:Converting between strings and ArrayBuffers。