javascript - 在 Windows Metro javascript 应用程序中读取文件

标签 javascript html windows-8 microsoft-metro winjs

这是读取文件选择器选取的文件内容的正确方法吗?我需要读取图像数据,以便将其发送到我的 Windows Metro Javascript 应用程序中的 Web 服务。我使用带有回调的 readFile 函数,该回调返回 evt 参数,然后使用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>

提前致谢。

最佳答案

更好的解决方案是:

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

 });

关于javascript - 在 Windows Metro javascript 应用程序中读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20225629/

相关文章:

c# - Windows 8 中的 bank-switch USB 设备

c++ - 为 wp7 构建了一个可以在 wp8 和 w8 上运行的游戏?

javascript - JQuery DataTables 不保存状态

javascript - Dojo 工具包关闭外部对话框

javascript - 更改 Bootstrap btn css 和悬停操作问题

html - 使 anchor 标记在向下滚动页面时平滑滚动

javascript - 将标签添加到文本框(以编程方式)

javascript - 更改 polymer 核心图标中的图标

html - 我应该 "quick list"我的国家下拉列表吗?

windows-8 - 通过 Visual Studio 2012 部署后看不到我的 Windows 8 应用商店应用程序的磁贴?