关于HTML5的file应用,已知本地一个图片文件路径,如何把它封装成HTML5中的file对象?

网络科技 2013-10-10 10:41:06
现在在学习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对象,不知是否可行呢?
...全文
2694 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
皓月之殇丶 2015-10-22
  • 打赏
  • 举报
回复
大侠 有找到解决方法吗 求解 邮箱 thw609283951@163.com
网络科技 2013-10-11
  • 打赏
  • 举报
回复
引用 5 楼 net_lover 的回复:
试试 http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-example-savingimages
大侠,这个我看了,我们用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();
网络科技 2013-10-10
  • 打赏
  • 举报
回复
引用 2 楼 l676331991 的回复:
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。
大至认可你的说法,但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/>");
        }
「已注销」 2013-10-10
  • 打赏
  • 举报
回复
没试过 不过 你可以效仿图片对象试试
l676331991 2013-10-10
  • 打赏
  • 举报
回复
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。
网络科技 2013-10-10
  • 打赏
  • 举报
回复
另外,我说下,我这样做有什么用处或好处,如果我能把服务器上的图片路径,封装成客户端的File对象,我就可以对这个对象随意操作了,可以拿来批量显示(例如查看服务器上批量图片的预览等),可以来判断类型,比较大小等等,总之文便好用就是。
孟子E章 2013-10-10
  • 打赏
  • 举报
回复
试试 http://www.html5rocks.com/en/tutorials/file/xhr2/#toc-example-savingimages

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧