Как получить итеративную сумму md5 для каждого чанка, используя плагин bluequ jquery upload

Мне нужно вычислить и отправить повторный md5-хеш в мой upload-api. Но я не знаю как.

Я использую учебник, найденный здесь:

http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/

Наряду с blueimp плагин загрузки jquery.

Для отправки только ОДНОГО ФАЙЛА (размер файла меньше размера фрагмента) все работает нормально. Но если файл разбит на части, то я понятия не имею, как отловить кусок, чтобы получить md5 из него.

В конце мне нужно сделать md5 итеративно, как описано здесь:

https://code.google.com/p/crypto-js/#Progressive_Hashing

$('#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 = $('
  • '); // Append the file name and file size tpl.find('p') .text( file.name ) .append('' + formatFileSize( file.size ) + ''); // 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' ); } });

    Надеюсь, вы поможете, чтобы я сам мог решить эту проблему.

    25
    задан Gurudutt Marathe 15 September 2019 в 14:19
    поделиться

    1 ответ

    Этот ответ на подобный вопрос предлагает метод для выполнения этого. Существуют также библиотеки, которые сделают это для Вас, как CryptoJS

    , суть - Вы, заполняют Ваш файл 0 байтами для достижения определенной длины, которая является делимой длиной блока, затем Вы считываете данные в буферный блок блоком, и имеет те данные. Затем Вы добавляете тот хеш для каждого блока, который Вы читаете.

    Хеш MD5 большой файл инкрементно

    0
    ответ дан 28 November 2019 в 02:12
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: