【发布时间】:2022-11-11 05:53:44
【问题描述】:
我想获得相同的哈希上的一个文件服务器正如在客户.
我试过了:
- 创建要上传的表单
- 用
node-forge客户端计算哈希 - 在 Linux 命令行上计算哈希
- 通过表单上传文件
- 将文件服务器端作为 blob 抓取
- 使用 .text() 服务器端读取内容
- 使用
node-forge计算哈希服务器端我被困在7点。
所以,首先我通过表单上传文件
<form method="POST" action="?/upload" enctype="multipart/form-data"> <input id="csvFile" name="csvFile" type="file" on:change={handleChange} /> <button type="submit" class="btn">Upload</button> </form>我用
node-forge计算浏览器中文件的哈希值:function handleChange(event) { let files = event.target.files; const file = files[0] reader = new FileReader(); reader.onload = function (event) { var binary = event.target.result; var md = forge.md.sha256.create(); sha256 = md.update(binary).digest().toHex(); }; reader.readAsBinaryString(f); }这计算的哈希值与我从命令行使用
sha256sum执行它时的哈希值相同,因此它是可靠的。但是,当我上传文件并在 SvelteKit 上处理它时,我无法获得相同的哈希值。我认为这是因为与浏览器中可用的内容相比,生成的 blob 中缺少文件名或其他内容。
export const actions = { upload: async ({ request }) => { const formData = await request.formData() const file = await formData.get(`csvFile`) as File; const contents = await file.text() const md = forge.md.sha256.create(); md.update(contents); const sha256 = md.digest().toHex() } }我不能在这里使用
new FileReader(),因为我在 Node 环境中。如何创建完全相同的哈希服务器端和客户端?我是否需要添加文件名或其他内容以获得与命令行相同的哈希?
提前致谢!
【问题讨论】:
标签: node.js hash sveltekit node-forge