正在读取Windows Metro javascript应用程序中的文件
Reading file in Windows Metro javascript app
这是读取文件选择器所选文件内容的正确方法吗?我需要读取图像数据,以便将其发送到我的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);
});
});
这里有几个问题:
- 将文件内容以文本形式读取并发送到Web服务不是一个好主意
- 使用
input type="file"
不会在用于拾取图像的应用程序中提供原生外观和感觉
相反,在这个msdn遍历的行上拾取和预览图像是很好的。除此之外,上传WinJS.xhr
调用看起来也没有什么不同。
还有其他可能与场景相关的要求,例如向web服务显示上传图像的预览。在将图像上传到服务时,我必须考虑我们的winjs应用程序的许多其他要求。这篇文章可能与你列出代码和全面思考这一点有关。
相关文章:
- Windows8应用程序(html&Javascript):从图片库(除了文件选择器)显示图像的另一种方式
- 将文件从应用程序文件夹复制到JQM/Phonegap应用程序中的根文件夹
- 如何在ExtJs4应用程序上为视图、存储和模型设置自定义文件夹名称
- 下载HTML5/Javascript MOBILE应用程序中的PDF文件
- 如何在dojo应用程序构建概要文件中加载json文件
- 如何从Node Webkit应用程序中退出外部CMD文件
- 访问离线jquery应用程序中的本地文件
- 使用angularjs和node.js时的Web应用程序文件夹结构
- 咕噜咕噜的usemin无法使用应用程序文件夹中的脚本
- 英特尔 XDK:播放不在应用程序文件夹中的音频
- 使用 requirejs 并尝试将 javascript 优化为供应商文件和应用程序文件
- 如何将多个 angularjs 文件编译为单个应用程序文件
- Chrome应用程序文件系统不存在
- Backbone.js模型urlRoot网络应用程序文件夹名称被追加了两次
- AngularJS应用程序文件结构
- Google Drive API;谷歌实时API -我可以把一个实时文件在应用程序文件夹
- 电子桌面应用程序文件结构
- 当我尝试使用茉莉花测试时,应用程序文件夹没有在ext . application中加载
- web服务-托管应用程序:文件权限,将参数从javascript传递到应用程序
- 如何使用 Commonjs 在视图中获取主干应用程序文件变量