Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用blueimp jquery上传插件获得每个块的md5迭代md5和_Javascript_Jquery_Hash_Md5_Blueimp - Fatal编程技术网

Javascript 如何使用blueimp jquery上传插件获得每个块的md5迭代md5和

Javascript 如何使用blueimp jquery上传插件获得每个块的md5迭代md5和,javascript,jquery,hash,md5,blueimp,Javascript,Jquery,Hash,Md5,Blueimp,我需要计算并向我的上传api发送一个迭代md5哈希。 但我不知道怎么做 我正在使用这里的教程: 以及blueimpjquery上传插件 对于只发送一个文件(文件大小小于块大小),一切正常。但是,如果一个文件被分块,那么我不知道如何捕获该分块以获得它的md5 最后,我必须像这里描述的那样迭代地创建md5: $(“#上传”).fileupload({ //此元素将接受文件拖放上载 dropZone:$(“#drop”), 类型:全局形式方法, 方法:“post”,//数据发送方法的类型 数据类型

我需要计算并向我的上传api发送一个迭代md5哈希。 但我不知道怎么做

我正在使用这里的教程:

以及blueimpjquery上传插件

对于只发送一个文件(文件大小小于块大小),一切正常。但是,如果一个文件被分块,那么我不知道如何捕获该分块以获得它的md5

最后,我必须像这里描述的那样迭代地创建md5:

$(“#上传”).fileupload({
//此元素将接受文件拖放上载
dropZone:$(“#drop”),
类型:全局形式方法,
方法:“post”,//数据发送方法的类型
数据类型:“json”,//从api调用接收的数据类型
maxChunkSize:全局块大小,
多部分:正确,
//将文件添加到队列时调用此函数;
//通过浏览按钮或通过拖放:
添加:功能(e、数据)
{
var reader=new FileReader();
var file=data.files[0];
var-jqXHR;
var tpl=$('
  • '); //附加文件名和文件大小 tpl.find('p') .text(file.name) .append(“”+formatFileSize(file.size)+“”); //将HTML添加到UL元素 data.context=tpl.appendTo(ul); //初始化旋钮插件 tpl.find('input').knob(); //收听“取消”图标上的单击 tpl.find('span')。单击(函数() { if(tpl.hasClass(“工作”)) { jqXHR.abort(); } tpl.fadeOut(函数() { tpl.remove(); }); }); //防止XHR在“多部分/表单数据”中发送数据 data.postMessage=data.files[0]。类型; data.contentType=data.files[0]。类型; var chunksize=GLOBAL\u CHUNK\u SIZE>file.SIZE?file.SIZE:GLOBAL\u CHUNK\u SIZE; //描述FileReader数据加载事件 reader.onload=函数(事件) { var binary=event.target.result; var md5=CryptoJS.md5(二进制).toString(); data.url+=”&md5sum=“+md5; //D A T A S E N D jqXHR=data.submit(); }; //向XHR对象添加url data.url=全局形式动作; data.url+=“?etf_id=“+全局文件夹_id; data.url+=“&file_title=“+file.name; //如果该文件将被发送在一块。。。 if(全局块大小>文件大小) { //向XHR对象添加url参数 data.url+=“&size\u chunk\u start=“+0; data.url+=“&size\u chunk\u length=“+chunksize; } //区块的此部分必须在“beforeSend”-回调中, //因为,在本例中,与块相关的大小数据未定义 //但是在那里可以买到。 //向XHR对象添加url参数 data.url+=“&size_final=“+file.size; //读取md5 sum并发送文件/区块。。。 //在多部分上,“文件”是块! reader.readAsBinaryString(文件); }, 发送前:函数(e,数据) { var file=data.files[0]; this.find(“.msg”).hide(); //如果文件将作为块发送。。。 if(全局块大小

    我希望您能提供帮助,这样我就可以自己解决这个问题。

    这个类似问题的答案提供了一种实现这一点的方法。还有一些库可以为您实现这一点,比如CryptoJS

    要点是用0字节填充文件,以达到可被块长度整除的特定长度,然后逐块将数据读入缓冲区,并获得该数据。然后为读取的每个块追加该哈希


    正在寻找类似的功能。丹尼尔,你找到解决方案了吗?是的,我写了一个完全不同的上传脚本。@丹尼尔只是一个建议:你可以用新代码回答你自己的问题,这样其他人会从中受益;)对不起,我不能。在这种情况下,我受到公司的限制:-(请关闭它,否则它将永远在“未回答问题”列表中。
    $('#upload').fileupload({
    
        // This element will accept file drag/drop uploading
        dropZone: $('#drop'),
    
        type        : GLOBAL_FORM_METHOD,
        method      : "post",   // Type of data-send-method
        dataType    : "json",   // Type of data to recieve from api-call
        maxChunkSize: GLOBAL_CHUNK_SIZE,
        multipart   : true,
    
        // This function is called when a file is added to the queue;
        // either via the browse button, or via drag/drop:
        add: function (e, data)
        {
            var reader = new FileReader();
            var file = data.files[0];
            var jqXHR;
    
            var tpl = $('<li class="working"><input type="text" value="0" data-width="48" data-height="48"'+
                ' data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" /><p></p><div class="msg"></div><span></span></li>');
    
            // Append the file name and file size
            tpl.find('p')
                .text( file.name )
                .append('<i>' + formatFileSize( file.size ) + '</i>');
    
            // Add the HTML to the UL element
            data.context = tpl.appendTo(ul);
    
            // Initialize the knob plugin
            tpl.find('input').knob();
    
            // Listen for clicks on the cancel icon
            tpl.find('span').click(function()
            {
                if( tpl.hasClass('working') )
                {
                    jqXHR.abort();
                }
    
                tpl.fadeOut( function()
                {
                    tpl.remove();
                });
            });
    
            // Prevent XHR from sending data in "multipart/formData"
            data.postMessage = data.files[0].type;
            data.contentType = data.files[0].type;
    
            var chunksize = GLOBAL_CHUNK_SIZE > file.size ? file.size : GLOBAL_CHUNK_SIZE;
    
            // Describe the FileReader-DataLoad-Event
            reader.onload = function( event ) 
            {
                var binary = event.target.result;
                var md5 = CryptoJS.MD5(binary).toString();
    
                data.url += "&md5sum=" + md5;
    
                // D A T A   S E N D 
                jqXHR = data.submit();
            };
    
            // ADD url to XHR-object
            data.url = GLOBAL_FORM_ACTION;
            data.url += "?etf_id=" + GLOBAL_FOLDER_ID;
            data.url += "&file_title=" + file.name;
    
            // If the file will be send in one piece...
            if( GLOBAL_CHUNK_SIZE > file.size )
            {
                // ADD url-parameter to XHR-object
                data.url += "&size_chunk_start=" + 0;
                data.url += "&size_chunk_length=" + chunksize;
            }
            // This part for the chunks must be in "beforeSend"-Callback,
            // because, the chunk-related size-data is undefined in this case
            // but available there.
    
            // ADD url-parameter to XHR-object
            data.url += "&size_final=" + file.size;
    
            // Read md5-sum and send the file / chunk...
            // On multipart "file" is a chunk !
            reader.readAsBinaryString( file );
        },
    
        beforeSend : function(e, data)
        {
            var file = data.files[0];
    
            this.find(".msg").hide();
    
            // If the file will be send as chunks...
            if( GLOBAL_CHUNK_SIZE < file.size )
            {
                console.log( "Chunk data: ", data.uploadedBytes, data.chunkSize, file.size, data );
    
                // ADD url-parameter to XHR-object
                data.url += "&size_chunk_start=" + data.uploadedBytes;
                data.url += "&size_chunk_length=" + data.chunkSize;
    
                if( typeof this.attr('session_id') !== "undefined" )
                    data.url += "&session_id=" + this.attr( 'session_id' );
            }
    
        });