Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Javaservlet通过WinJS将图像存储到mysql数据库中_Java_Javascript_Servlets_Winjs - Fatal编程技术网

通过Javaservlet通过WinJS将图像存储到mysql数据库中

通过Javaservlet通过WinJS将图像存储到mysql数据库中,java,javascript,servlets,winjs,Java,Javascript,Servlets,Winjs,我试图在Windows8JavaScript应用程序中找到存储在我的计算机上的一个图像文件,并通过WinJS.xhr将其发布到一个Java servlet,在该servlet中,数据被插入mysql数据库 问题的原因可能是当1)通过.xhr方法发送数据时,使用参数encodeURIComponent(evt.target.result)或2)通过Java servlet将此数据插入mysql数据库。该错误实际上发生在2)处,因为它仅在使用1)时插入空值,但对于其他值,servlet工作正常(请参

我试图在Windows8JavaScript应用程序中找到存储在我的计算机上的一个图像文件,并通过WinJS.xhr将其发布到一个Java servlet,在该servlet中,数据被插入mysql数据库

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

Ad 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>
属性映射被定义为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);
           });

 });
更好的解决方案是:

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

 });

此问题的答案可在以下问题中找到:此问题的答案可在以下问题中找到: