2015-10-15 50 views
0

我想計算與Dropzone.js上傳每個圖像的MD5校驗,這樣,用戶可以安全地刪除正確的圖像(我計算MD5校驗在PHP的一部分)。獲取文件的MD5上Dropzone.js

我需要與另一個庫(FastMD5或另一個庫)創建MD5哈希值,然後在單擊刪除按鈕時將其與數據一起發送。

現在:

$Dropzone.autoDiscover = false; 
    // Dropzone class: 
    var myDropzone = new Dropzone("div#dropzonePreview", { 
     maxFiles:5, 
     url: "up", 
     acceptedFiles: ".png,.jpg,.gif,.jpeg", 
     maxFilesize: 6, 
     uploadMultiple: true, 
     addRemoveLinks: true, 

     removedfile: function(file) { 
      var name = file.name; 
      var idform = document.getElementById('idform').value; //for me 
      var hash= md5(file); // not tested 
      $.ajax({ 
       type: 'POST', 
       url: 'del.php', 
       data:"filename="+name+"&idform="+idform+"&hash="+hash, 
       dataType: 'html' 
      }); 
     var _ref; 
     return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0;   
     } 

    }); 

的問題是,MD5(文件)不工作,我想這是不是數據文件,我試圖尋找數據計算哈希但一無所獲。

回答

1

我敢肯定有更好的方式來做到這一點,但我做了這一點,它發出正確的哈希我刪除網頁(del.php),我剛剛意識到,我還需要哈希以避免同一個文件的2倍..上傳

我用SPARK-MD5

Dropzone.autoDiscover = false; 
     // Dropzone class: 
     var myDropzone = new Dropzone("div#dropzonePreview", { 
      maxFiles:5, 
      url: "upload.php", 
      acceptedFiles: ".png,.jpg,.gif,.jpeg", 
      maxFilesize: 6, 
      uploadMultiple: true, 
      addRemoveLinks: true, 

     //to remove one file 
      removedfile: function(file) { 
       var name = file.name; 
       var idform = document.getElementById('idform').value; //for me 
       // START SPARKMD5 
       var blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice, 
        chunkSize = 2097152,        // Read in chunks of 2MB 
        chunks = Math.ceil(file.size/chunkSize), 
        currentChunk = 0, 
        spark = new SparkMD5.ArrayBuffer(), 
        fileReader = new FileReader(); 

       fileReader.onload = function (e) { 
        console.log('read chunk nr', currentChunk + 1, 'of', chunks); 
        spark.append(e.target.result);     // Append array buffer 
        currentChunk++; 

        if (currentChunk < chunks) { 
         loadNext(); 
        } else { 
         console.log('finished loading'); 
         // START DROPZONE PART 
         $.ajax({ 
          type: 'POST', 
          url: 'del.php', 
          data:"filename="+name+"&idform="+idform+"&hash="+spark.end(), //spark.end is the MD5 
          dataType: 'html' 
         }); 
         var _ref; 
         return (_ref = file.previewElement) != null ? _ref.parentNode.removeChild(file.previewElement) : void 0; 
         // END DROPZONE PART 
        } 
       }; 

       fileReader.onerror = function() { 
        console.warn('oops, something went wrong.'); 
       }; 

       function loadNext() { 
        var start = currentChunk * chunkSize, 
         end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; 

        fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); 
       } 

       loadNext(); 
       // END SPARKMD5 
      } 
}); 

我不確定fileReader.onerror和加載下一個的必要性。 反正它的工作時,需要的是點擊「刪除」按鈕時發送哈希,但我仍然在尋找更好的方法,然後再上傳到比較MD5。