现在在学习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

解决方案 »

  1.   

    另外,我说下,我这样做有什么用处或好处,如果我能把服务器上的图片路径,封装成客户端的File对象,我就可以对这个对象随意操作了,可以拿来批量显示(例如查看服务器上批量图片的预览等),可以来判断类型,比较大小等等,总之文便好用就是。
      

  2.   

    File是客户端的文件对象,服务器的文件,客户端是无从得知的。
    服务器上的东西对于浏览器来说,只有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。
      

  3.   

    大至认可你的说法,但IE中貌似可以构造File对象,当然通用性有问题,还有它是用ActiveXObject,默认也是不开启的吧。  var filepath="D:\\Test\\文本1.txt";
            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/>");
            }
      

  4.   

    试试
    http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-example-savingimages
      

  5.   

    大侠,这个我看了,我们用ajax可以从服务器返回文件的二进制码,但不知道取得二进制码后,在js中,有没办法转成File对象呢?貌似里边这方面没有详写,网上也没找着。var xhr = new XMLHttpRequest();
    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();