2013-11-22 73 views
1

我試圖找到存儲在我的計算機上的圖像文件在Windows 8 JavaScript應用程序中,並通過WinJS.xhr發佈到插入數據的Java servlet中一個mysql數據庫。通過Java Servlet通過WinJS將圖像存儲到mysql數據庫

當任1)通過使用如參數encodeURIComponent方法(evt.target.result)發送通過.xhr方法的數據問題的原因可能是2)插入通過這個數據時Java的servlet到mysql數據庫。該錯誤實際上發生在2),因爲它僅在使用1)時插入空值,但對於其他值,該servlet完美工作(請參閱廣告2)。

廣告1):我不知道,如果在以下環境中使用encodeURIComponent方法(evt.target.result)是在適當的方式來獲得存儲的文件的內容和POST請求做準備:

document.getElementById("btnUpload").onclick = function() { 
      var input = document.getElementById("file_input"); 
      readFile(input.files[0], function(file, evt) 
      { 
       WinJS.xhr({ 
        type: "post", 
        url: "http://servlett.domain.com:8080/Servlet/addImage", 
        headers: { "Content-type": "application/x-www-form-urlencoded" }, 
        data: "fk_floor_id=" + currentFloorId + "&map=" + encodeURIComponent(evt.target.result) 
       }).then(
        function (xhr) { 
         var success = xhr.response; 
         }, function (xhr) { 
         var error = xhr.response; 
        } 
       ); 
      }); 

參數evt.target.result通過以下方法獲得:

 function readFile(file, callback) { 
     var reader = new FileReader(); 
     reader.onload = function (evt) { 
      if (typeof callback == "function") 
       callback(file, evt); 
     }; 
     reader.readAsText(file); 
    } 

其中file_input是採用以下形式內部的輸入組件:

<form action="" method="post"> 
     <input type="file" id="file_input" /> 
     <button type="button" id="btnUpload">Upload</button> 
    </form> 

順便說一句:這樣做的這樣,我從下面的教程每javascript文件上傳了:http://www.tutorials.de/content/1239-file-upload-per-javascript-html-5-file-api.html

廣告2)現在我的servlet監聽和處理數據,但他只商店空值到數據庫中。如果我從1中刪除參數「& map =」+ encodeURIComponent(evt.target.result),並將其替換爲「& map = test」,則servlet將這些值完美地存儲到數據庫中。這裏的小服務程序代碼:

stmt = conn.createStatement(); 
     stmt.executeUpdate("INSERT INTO maps (fk_floor_id,map) VALUES ("+request.getParameter("fk_floor_id")+",'"+request.getParameter("map")+"')"); 

屬性映射被定義爲mysql內部的blob。

也許有人看到錯誤或可以告訴我如何以不同的方式在JavaScript中上傳圖像。

+0

回答這個問題,可以在以下問題中找到: http://stackoverflow.com/questions/20225629/reading-file-in-windows-metro -javascript-應用程序/ 20338103#20338103 – Simon

回答

1

更好的解決方案是:

var picker = new Windows.Storage.Pickers.FileOpenPicker(); 
picker.fileTypeFilter.replaceAll([".jpg", ".bmp", ".gif", ".png"]); 
picker.pickSingleFileAsync().then(progressResults, displayError); 

function progressResults(file) { 
    file.openAsync(Windows.Storage.FileAccessMode.read).done(function (stream) { 
    var inputStream = stream.getInputStreamAt(0); 
    var reader = new Windows.Storage.Streams.DataReader(inputStream); 
    var size = stream.size; 
    if (size > 0) { 
      reader.loadAsync(size).then(function() { 
      var b = reader.readBuffer(size); 
      var s = Windows.Security.Cryptography.CryptographicBuffer.encodeToBase64String(b); 
       var xhrOptions = { 
        type: 'post', 
        url: "http://servlet.domain.com:8080/Servlet/addImage", 
          headers: { "Content-type": "application/x-www-form-urlencoded" }, 
          data: "fk_floor_id=" + currentFloorId + "&map=" + s 
       } 
       WinJS.xhr(xhrOptions); 
      }); 

}); 
相關問題