java - 通过WinJS通过Java Servlet将图像存储到mysql数据库中

标签 java javascript servlets winjs

我正在尝试在 Windows 8 Javascript 应用程序中找到存储在我的计算机上的图像文件,并通过 WinJS.xhr 将其发布到 Java servlet,其中数据将插入到 mysql 数据库中。

问题的原因可能是1)使用参数encodeURIComponent(evt.target.result)通过.xhr方法发送数据,或通过Java servlet将此数据插入到mysql数据库时2)。该错误实际上发生在 2) 处,因为它仅在使用 1) 时插入空值,但对于其他值,servlet 可以正常工作(参见广告 2)。

广告 1): 我不确定在以下上下文中使用encodeURIComponent(evt.target.result) 是否是获取存储文件的内容并为发布请求做好准备的适当方法:

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

Ad 2) 现在我的 servlet 监听并处理数据,但他只将空值存储到数据库中。如果我从 1) 中删除参数“&map=”+encodeURIComponent(evt.target.result) 并将其替换为“&map=test”,则 servlet 会完美地将值存储到数据库中。这是 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 中上传图像。

最佳答案

更好的解决方案是:

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

 });

关于java - 通过WinJS通过Java Servlet将图像存储到mysql数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20142341/

相关文章:

java - session在几个servlet之间是否存在同步问题?

java - Spring组件中如何访问HttpServletResponse?

java - 强制 Hibernate 插入而不使用 Select 语句

java - 启用反向代理访问 ActiveMQ

javascript - HTML5 + Javascript : Networking for a game

javascript - 使用来自后端的 Regexp 进行 Angular 电子邮件验证

java - AbstractExcelView 在基于 Spring 的应用程序中被弃用

java - 正则表达式在 drools 5.3.0 中不起作用

javascript - jQuery 事件构造函数

servlets - servlet url 匹配模式中/和/* 之间的区别