现在在学习html5中的file对象应用,发生挺实用了,客户端可以通过拖拉或浏览文件来获取file对象(当然浏览器要支持html5才行),这样,我们就可以直接在客户端获取文件相关的信息了,如:文件名、大小等等。
对这方面还不大了解的同学,可以参考这篇博文,写得不错(http://www.jsmix.com/blog/html5/html5-file-pre-test.html)我现在的一个需求是:
已知一个图片文件(或其它文件)的路径,如:http://192.168.1.11:8080/image/photo.jpg,
我现在想把photo.jpg封装成js中的File对象,不知是否可行呢?
html5file
对这方面还不大了解的同学,可以参考这篇博文,写得不错(http://www.jsmix.com/blog/html5/html5-file-pre-test.html)我现在的一个需求是:
已知一个图片文件(或其它文件)的路径,如:http://192.168.1.11:8080/image/photo.jpg,
我现在想把photo.jpg封装成js中的File对象,不知是否可行呢?
html5file
服务器上的东西对于浏览器来说,只有http,只有URL和URL响应的报头、报文主体。一切东西都需要服务器亲自告诉客户端,客户端才能知晓某个URL相关的内容是什么。
静态文件,apache或者nginx或者tomcat自动帮我们处理了url响应,报头内容、二进制主体,都是服务器自动帮我们回复给了浏览器。对于可执行的脚本,服务器是坚决不会返回文件类型和大小的,服务器返回的是脚本执行后的内容,返回的类型是脚本指定的Content-Type。如果js能主动获取服务器的物理路径的真实文件内容,那不就是爆了源码了么?因此,要完成LZ的功能,服务器端的代码配合一下就行,自己定义个json,有文件大小,文件类型,最后修改日期,url地址,等等,和js的File又有什么区别呢?File对象也就是可以用FileReader来读取二进制对吧,这个后端配合一下,也可以完成的,用XMLHttpRequest请求文件的url,就可以拿到url返回的二进制内容。最后呢,就是说,服务端对于客户端是透明的(不可见的意思),唯一对应的就是,URL和HTTP响应。如果服务器不配合响应,客户端根本不知道服务端有什么样的东西。最最后,js的File貌似不能自己构造,只能来自于file input或者drag。
var fso = new ActiveXObject("Scripting.FileSystemObject");
var file = fso.GetFile(filepath);
dispay("DateCreated:"+file.DateCreated);
dispay("DateLastAccessed:"+file.DateLastAccessed);
dispay("DateLastModified:"+file.DateLastModified);
dispay("Drive:"+file.Drive);
dispay("Name:"+file.Name);
dispay("ParentFolder:"+file.ParentFolder);
dispay("Path:"+file.Path);
dispay("ShortName:"+file.ShortName);
dispay("ShortPath:"+file.ShortPath);
dispay("Size:"+file.Size);
dispay("Type:"+file.Type);
function dispay(value){
document.write(value+"<br/>");
}
http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-example-savingimages
xhr.open('GET', '/path/to/image.png', true);// Hack to pass bytes through unprocessed.
xhr.overrideMimeType('text/plain; charset=x-user-defined');xhr.onreadystatechange = function(e) {
if (this.readyState == 4 && this.status == 200) {
var binStr = this.responseText;//这个是可以取到图片的二进制码,但如何做到binStr -->File对象呢?否则的话,二进制码似乎没什么用处啊
for (var i = 0, len = binStr.length; i < len; ++i) {
var c = binStr.charCodeAt(i);
//String.fromCharCode(c & 0xff);
var byte = c & 0xff; // byte at offset i
}
}
};xhr.send();