我試圖找到存儲在我的計算機上的圖像文件在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中上傳圖像。
回答這個問題,可以在以下問題中找到: http://stackoverflow.com/questions/20225629/reading-file-in-windows-metro -javascript-應用程序/ 20338103#20338103 – Simon