1:取得file对象
2:读取2进制数据
3:模拟http请求,把数据发送出去(这里通常比较麻烦)
在forefox下使用 xmlhttprequest 对象的 sendasbinary 方法发送数据;
4:完美实现
遇到的问题
目前仅有 firefox 可以正确上传文件。(chrome也可以采google.gears上传)
对于从firefox和chrome下读取到的文件数据好像不一样(不知道是否是调试工具的原因)
chrome以及其他高级浏览器没有 sendasbinary 方法 只能使用 send 方法发送数据,有可能是上面的原因导致无法正确上传。(经过测试普通文本文件可以正确上传)
复制代码 代码如下:
<!doctype html >
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>html5 file and filereader</title>
<link href="html/ui.css" _mce_href="html/ui.css" rel="stylesheet" />
</head>
<body>
<style type="text/css"><!--
.box{background:#f8f8f8;border:1px solid #ccc;padding:10px;-webkit-box-shadow:#000 0px 0px 4px;-moz-box-shadow:#000 0px 0px 4px;
-webkit-border-radius:2px;font-family: 'segoe ui', calibri, 'myriad pro', myriad, 'trebuchet ms', helvetica, arial, sans-serif;
}
.bl{ font-weight:700;}
.dl{ padding:10px; border-top:1px dotted #999;}
.dl dd{ padding:0; margin:0;}
.log{border:1px solid #ccc; background:#f8f8f8; width:200px; position:absolute; right:10px; top:10px;}
.log li{border:1p dotted #ccc;word-wrap:break-word;word-break:break-all; margin:0px; padding:0;}
.log ul{margin:0px; padding:0; list-style:none;}
--></style><style type="text/css" _mce_bogus="1"><!--
.box{background:#f8f8f8;border:1px solid #ccc;padding:10px;-webkit-box-shadow:#000 0px 0px 4px;-moz-box-shadow:#000 0px 0px 4px;
-webkit-border-radius:2px;font-family: 'segoe ui', calibri, 'myriad pro', myriad, 'trebuchet ms', helvetica, arial, sans-serif;
}
.bl{ font-weight:700;}
.dl{ padding:10px; border-top:1px dotted #999;}
.dl dd{ padding:0; margin:0;}
.log{border:1px solid #ccc; background:#f8f8f8; width:200px; position:absolute; right:10px; top:10px;}
.log li{border:1p dotted #ccc;word-wrap:break-word;word-break:break-all; margin:0px; padding:0;}
.log ul{margin:0px; padding:0; list-style:none;}
--></style>
<div class="box" id="baseinfo">
<h2>(把图片拖拽到这里)利用 filereader 获取文件 base64 编码</h2>
<div></div>
</div>
<div class="log">
<ul id="log">
</ul>
</div>
<script type="text/CSS" ><!--
(function(){
window.datavalue = 0;
var html = ' <dl class="dl">
<dd>filename: $filename$</dd>
<dd>filetype: $filetype$</dd>
<dd>filesize: $filesize$</dd>
<dd><img src="$data$" /></dd>
<dd>filebase64: <br/>
<div style="width:100%; height:100px;">$filebase64$</div>
</dd>
</dl>
'
var log = function(msg){
//console['log'](msg);
document.getelementbyid('log').innerhtml += '<li>'+ msg +'</li>';
}
var dp = function(){
var defconfig = {
dropwrap : window
}
this.init.apply(this, [defconfig]);
this.file = null;
}
dp.prototype = {
init:function(args){
var dropwrap = args.dropwrap;
var _this = this;
dropwrap.addeventlistener("dragenter", this._dragenter, false);
dropwrap.addeventlistener("dragover", this._dragover, false);
dropwrap.addeventlistener('drop', function(e){_this.readfile.call(_this,e)} , false);
log('window drop bind--ok');
},
_dragenter:function(e){e.stoppropagation();e.preventdefault();},
_dragover:function(e){e.stoppropagation();e.preventdefault();},
readfile:function(e){
e.stoppropagation();
e.preventdefault();
var dt = e.datatransfer;
var files = dt.files;
for(var i = 0; i< files.length;i++){
var html = html.slice();
html = this.writeheader(files[i], html);
this.read(files[i], html);
}
},
read:function(file, h){
var type = file.type;
var reader = new filereader();
reader.onprogress = function(e){
if (e.lengthcomputable){
log('progress: ' + math.ceil(100*e.loaded/file.size) +'%')
}
};
reader.onloadstart = function(e){
log('onloadstart: ok');
};
reader.onloadend = function(e){
var _result = e.target.result;
//console['log'](e.target);
log('data uri--ok');
var d = document.createelement('div');
h = h.replace('$filebase64$', _result);
if(/image/.test(file.type)){
h = h.replace('$data$',_result);
}
d.innerhtml = h;
document.getelementbyid('baseinfo').appendchild(d);
};
reader.readasdataurl(file); // www.3ppt.com base 64 编码
return;
},
writeheader:function(file, h){
log(file.filename + '+' + (file.size/1024));
return h.replace('$filename$', file.filename).replace("$filesize$",(file.size/1024)+'kb').replace("$filetype$",file.type);
}
}
new dp();
})()
// --></script>
</body>
</html>
filereader对象
var filereader = new filereader();
filereader.onloadend = function(){
console.log(this.readystate); // 这个时候 应该是 2
console.log(this.result); 读取完成回调函数,数据保存在result中
}
filereader.readasbinarystring(file);// 开始读取2进制数据 异步 参数为file 对象
//filereader.readasdataurl(file); // 读取base64
//filereader.readastext(file);//读取文本信息
相关推荐:
AI网页效果生成:开启网站设计的新纪元,ai画线祥云
SEO热词:提升网站排名的关键秘诀,一句话营销推广怎么写好
AI做文章:引领智能创作的未来
什么是seo网络推广seo顾问,seo网络推广员 ,ai20170119
【SEO优化全攻略】提升网站流量的终极秘籍,带你轻松玩转搜索引擎优化!,金融网站推广维护
ChatGPT出问题?背后的原因与解决方案,夸克ai写作生成
文章生成AI:让写作轻松高效的神奇工具
SEO调整,助力网站流量爆发式增长!,江都seo优化排名
seo竞价做的什么工作,seo 竞价 ,office智能ai
SEO知道:让你的网站在搜索引擎中脱颖而出,水安建设集团网站
SEO快排还有效果吗揭秘快速排名的真相与未来趋势,ai人像波普
seo需要什么人员,seo需要什么技能 ,画大学ai
怎么用AI写出令人惊叹的文章?轻松搞定写作难题!
GoogleSEO打满分自然流量会高吗?揭开SEO优化的真相,猪插画ai
怎么分辨文章是不是AI写的?五大技巧揭开真相
SEO开发:数字营销的核心驱动力,园区网站建设
SEO未来:如何在变革中抢占先机,迎接数字营销的新纪元,台州网站建设分析和总结
智能AI生成文章释放创作新可能
自动生成文章的AI软件,助力内容创作的未来
AI生成网页模板,轻松打造专业网站,ai网格画法
未来科技:AI工具为生活赋能,打造智能未来
AI人工智能生成文章:开启写作新时代
ChatGPT付款银行卡被拒绝?解决方案全解析!,小发猫ai智能写作查重能过吗
AI人工智能文章生成平台,释放创作无限可能
2024年AI写文章生成器推荐:让创作轻松高效,提升写作水平
为什么seo这么麻烦,seo是什么意思 为什么要做seo ,dota1ai地图命令选ai
SEO场景下的数字营销:如何通过精准优化提升网站流量,陕西融发建设集团网站
优化整站,让网站飞速增长,打造行业竞争力,广东网站建设与维护
怎么用AI生成文章?全新写作方式的揭秘与应用指南
互联网资源的无限潜力:如何利用数字世界为个人和企业创造价值,信阳网站建设正规公司
SEO排位:如何通过精准策略提升网站排名,获得流量与转化,林海网络推广营销
好用的AI写作软件,让创作更高效
ChatGPT怎么有梯子?突破网络限制,轻松畅享AI智能,ai对唱音响
360AI写作怎样?助力创作的新风尚,ai到访
文字写作AI生成工具:让创作更简单、更高效
AI代谢文章:从灵感到成果的创作革命
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
京东业绩再创新高:未来电商巨头的成功之道,如何做seo优化留痕
SEO有意:如何通过优化策略提升网站排名与流量,天津政府智慧网站建设
SEO范例:如何通过优化提升网站流量,获取更多商机,广州抖音seo搜索广告
SEO手段:提升网站流量的制胜法宝,idc网站怎么推广
seo用什么手法,seo方式 ,ai绘画飞翔
优化服务网-提升客户体验,打造全方位智慧服务平台,东莞网站建设员招聘信息
SEO如何做?全方位解析提升网站排名的秘诀,AI翻译好处
什么是“神马关键词”?如何用它提升你的网络营销效果?,新闻发布网站怎么做推广
AI免费生成文章让创作变得轻松自如
ChatGLM不能搜索网页内容,你真的了解它的局限性吗?,ai修复情侣
优化文字,让表达更精准:提升写作效率的关键,个人网站建设外包
什么是seo公司口碑,seo品牌 ,ai大模型训练是什么意思
文章AI生成标题:让创作更轻松,内容更精彩