2017-02-20 59 views
0

我正在使用簡單的窗體將圖像以base64字符串的形式發佈到我的服務器。當我上傳小圖片(< 500 kb)時,它對.jpg和.png文件非常適用。但是,當尺寸例如4 MB的函數什麼都不做,甚至不打印警報將大圖像編碼爲base64不起作用

HTML:

​​

JS:

function encodeImageFileAsURL() { 
    var filesSelected = document.getElementById("foto").files; 
    var filename = document.getElementById("foto").value; 

    var regex = /.*\\(.*)/; 
    var match = regex.exec(filename); 

    filename = match[1]; 

    if (filesSelected.length > 0) { 
     var fileToLoad = filesSelected[0]; 
     var fileReader = new FileReader(); 

     fileReader.onload = function(fileLoadedEvent) { 
      var srcData = fileLoadedEvent.target.result; // <--- data: base64 

      alert(srcData); 

      $.ajax({ 
       type: 'POST', 
       url: '/upload/' + filename, 
       data: srcData, 
       dataType: "text", 
       contentType:"text/plain" 
      }); 
     } 

     fileReader.readAsDataURL(fileToLoad); 
    } 
} 

回答

0

你刻意做兩個HTTP POST操作?你有<input type="submit">,所以只要JS函數返回HTTP表單POST執行,你就關閉了。如果您更改爲<input type="button">,那麼帖子不會被表單執行,您應該能夠開始調試。

此外,我不確定當您嘗試警告一個幾兆字節的base64編碼圖像時會發生什麼情況!

我有你的榜樣削減到這一成功:

function encodeImageFileAsURL() { 
    var filesSelected = document.getElementById("foto").files; 

    var file = filesSelected[0]; 

    var reader = new FileReader(); 

    reader.onload = (function (f) { 
     return function (e) { 
      alert('***got here***'); 
     }; 
    })(file); 

    reader.readAsDataURL(file); 
} 

有了改變輸入鍵按鈕,不提交。

+0

是的我發佈到兩個不同的方法在我的後端,因爲我正在使用一個非常「測試」框架,也沒有知識,使其更好。 – freinn