You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DropzoneJS中生成文件的SHA1校验值?

在DropzoneJS中生成文件SHA1用于Backblaze B2上传

你可以基于原生JS的SHA1生成逻辑,结合Dropzone的文件对象实现需求。核心思路是利用FileReader读取Dropzone文件对象的内容,再用CryptoJS计算SHA1值,最后设置到请求头中。

步骤1:封装SHA1生成函数

先写一个返回Promise的异步函数,方便在Dropzone的异步流程中调用:

function generateSHA1(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = function() {
      try {
        // 读取文件二进制内容并计算SHA1,转成十六进制字符串
        const hash = CryptoJS.SHA1(CryptoJS.enc.Latin1.parse(reader.result)).toString(CryptoJS.enc.Hex);
        resolve(hash);
      } catch (err) {
        reject(err);
      }
    };
    reader.onerror = reject;
    reader.readAsBinaryString(file);
  });
}

步骤2:修改Dropzone代码

在获取预签名URL后,调用上述函数生成SHA1,再设置请求头并触发文件上传:

let myDropzone = new Dropzone("#dropzone", {
    acceptedFiles: "image/jpeg,image/jpg",
    maxFilesize: 100,
    init: function () {
        this.on("addedfile", function (file) {
            fetch("/api/presign-upload-url", {
                headers: {
                    "Content-Type": "application/json",
                    "Accept": "application/json",
                    "X-Requested-With": "XMLHttpRequest",
                    "X-CSRF-Token": csrfToken
                },
                method: "post",
                credentials: "same-origin",
                body: JSON.stringify({
                    key: file.name
                })
            })
            .then(function (response) {
                return response.json();
             })
            .then(function (json) {
                // 生成文件SHA1值
                return generateSHA1(file).then(hash => {
                    // 设置Backblaze B2所需的请求头
                    myDropzone.options.headers = {
                        "Content-Type": file.type,
                        "Authorization": json.upload_url.authorizationToken,
                        "X-Bz-File-Name": file.name,
                        "X-Bz-Content-Sha1": hash,
                    };
                    myDropzone.options.url = json.upload_url.uploadUrl;
                    // 触发文件上传
                    myDropzone.processFile(file);
                });
            })
            .catch(function(err) {
                console.error("上传准备失败:", err);
                // 给用户显示错误提示
                myDropzone.emit('error', file, '文件校验值生成失败,请重试');
            });
        });
    }
});

注意事项

  • 确保已引入CryptoJS库(需包含SHA1模块),否则无法计算哈希值。
  • Dropzone的addedfile事件中拿到的file对象是原生File的包装实例,可以直接传给FileReader使用。
  • Backblaze B2要求X-Bz-Content-Sha1的值是SHA1的十六进制字符串,因此必须调用.toString(CryptoJS.enc.Hex)将CryptoJS返回的哈希对象转成字符串。

内容的提问来源于stack exchange,提问作者Only Bolivian Here

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 15:42:37