Wie ermittle ich progressiv md5-Summe bei Multipart-Upload mit blueimp FileUploader?

Mitglied: TheFreeman

TheFreeman (Level 1)

19.11.2015 um 16:18 Uhr, 1127 Aufrufe

Hallo zusammen,

Ich benutze folgende Scripts für mein File-Upload-GUI:
Mini AJAX File Upload Form | Tutorialzine
https://github.com/blueimp/jQuery-File-Upload

Mein Problem liegt darin, dass ich nach einem Multipart-Upload von großen Dateien
am Ende eine MD5-Summe mitsenden muss, Daher möchte ich gerne aus Performance-
Gründen die md5-Summe immer nur von einem Chunk berechnen und diese dann
progressiv, wie hier beschrieben aufrechnen:
https://code.google.com/p/crypto-js/...essive_Hashing
(... nur eben mit md5 )

Allerdings weiss ich nicht, wie ich an den erzeugten blob herankomme
bzw. wo ich diesen abgreifen kann.

Hat hierzu bitte jemand eine Idee? Ich sitze schon ein paar Tage an dem Problem und komme einfach nicht weiter.

Dazu habe nun folgende options (Ausschnitt):

$('#upload').fileupload({

dropZone: $('#drop'),

type : GLOBAL_FORM_METHOD,
method : "post",
dataType : "json",
maxChunkSize: GLOBAL_CHUNK_SIZE,
multipart : true,

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>');

tpl.find('p')
.text( file.name )
.append('' + formatFileSize( file.size ) + '');

data.context = tpl.appendTo(ul);

tpl.find('input').knob();

tpl.find('span').click(function()
{
if( tpl.hasClass('working') )
{
jqXHR.abort();
}

tpl.fadeOut( function()
{
tpl.remove();
});
});

data.postMessage = data.files[0].type;
data.contentType = data.files[0].type;

var chunksize = GLOBAL_CHUNK_SIZE > file.size ? file.size : GLOBAL_CHUNK_SIZE;

reader.onload = function( event )
{
var binary = event.target.result;
var md5 = CryptoJS.MD5(binary).toString();

data.url += "&md5sum=" + md5;

jqXHR = data.submit();
};

data.url = GLOBAL_FORM_ACTION;
data.url += "?etf_id=" + GLOBAL_FOLDER_ID;
data.url += "&file_title=" + file.name;

if( GLOBAL_CHUNK_SIZE > file.size )
{
data.url += "&size_chunk_start=" + 0;
data.url += "&size_chunk_length=" + chunksize;
}

data.url += "&size_final=" + file.size;

reader.readAsBinaryString( file );
},

beforeSend : function(e, data)
{
var file = data.files[0];

this.find(".msg").hide();

if( GLOBAL_CHUNK_SIZE < file.size )
{
console.log( "Chunk data: ", data.uploadedBytes, data.chunkSize, file.size, data );

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' );
}

});
Vielen Dank im Voraus! :-) face-smile