拖图片进浏览器的时候阻止浏览器的默认行为(比如打开直接图片)
dropbox 给我们的容器添加上几个事件绑定dragenter,dragover,drop三个事件dropbox.addEventListener(dragenter, function(e){ e.stopPropagation(); e.preventDefault(); }, false); dropbox.addEventListener(dragover , function(e){ e.stopPropagation(); e.preventDefault(); }, false); dropbox.addEventListener(drop, function(e){ e.stopPropagation(); //个人的理解是若在dropbox上的drop事件被监听多次则两外的事件绑定无效了不知道对不对 e.preventDefault(); //阻止默认动作 e.dataTransfer.files//一个file类型的数组就是你拖拽进来的文件 }, false);2.在得到一个文件file后,要把它显示出来预览图片要用到FileReader1 var rdnew FileReader(); 2 rd.onloadendfunction(e){ 3 var imgdocument.createElement(img);//创建一个图片 4 img.srcthis.result;//result就是读出来的内容 5 img.width100; 6 img.titlefile.name;//文件的原始名称 7 8 } 9 rd.readAsDataURL({file}); // 读取为dataurlFilereader有下面几种方法,预览图片用到的是readAsDataURL。方法名参数描述abortnone中断读取readAsBinaryStringfile将文件读取为二进制码readAsDataURLfile将文件读取为 DataURLreadAsTextfile, [encoding]将文件读取为文本3.把图片发送到服务端进行处理要提交到服务器我们必须把图片读取为二进制的格式这里就用到了Filereader的readAsBinaryString1 var reader new FileReader(); 2 reader.readAsBinaryString({file}); 3 4 reader.onloadend function(){ 5 //bug(this.readyState); // 这个时候 应该是 2 6 //bug(this.result); //读取完成回调函数数据保存在result中 7 var fileDatathis.result; 8 var CRLF\r\n; 9 var xhr new XMLHttpRequest(); 10 xhr.open(post, self.server, true); 11 //xhr.onreadystatechangefunction(){}; 12 var boundary------OTkwNzI0OTEx----;//一段随机字符串最好根据时间来生成为了分割多个表单项 13 // 模拟一个文件提交请求 14 xhr.setRequestHeader(Content-Type, multipart/form-data, boundaryboundary); 15 //xhr.setRequestHeader(Content-Length, file.size); 在chrome下会出错可能是出于安全考虑不允许这样做 16 var body ; 17 body -- boundary CRLF; 18 body Content-Disposition: form-data; name{fileFieldName}; filename file.name CRLF; 19 body Content-Type: file.typeCRLFCRLF; 20 body fileData CRLF; 21 body -- boundary --CRLF; 22 xhr.onreadystatechange function (aEvt) { 23 if (xhr.readyState 4) { 24 if (xhr.status 200) 25 alert(xhr.responseText); 26 else 27 console.log(Error, xhr.statusText); 28 } 29 }; 30 31 xhr.sendAsBinary(body); 32 33 34 35 }上面代码的第18行filename直接用的原文件名称并没有改名这在原名为汉字的情况下会提示错误应该处理一下但不知道怎么弄值描述application/x-www-form-urlencoded在发送前编码所有字符默认multipart/form-data不对字符编码。在使用包含文件上传控件的表单时必须使用该值。text/plain空格转换为 加号但不对特殊字符编码。上面是在w3cschool搜到的既然multipart/form-data不对字符编码但为什么会出错希望知道的能告诉一声模拟出来的数据要以二进制发送。火狐XMLHttpRequest 对象中有sendAsBinary()方法这个是火狐私有的。chrome中没有但是可以模拟sendAsBinary1 XMLHttpRequest.prototype.sendAsBinary function(datastr) { 2 function byteValue(x) { 3 return x.charCodeAt(0) 0xff; 4 } 5 var ords Array.prototype.map.call(datastr, byteValue); 6 var ui8a new Uint8Array(ords); 7 this.send(ui8a.buffer); 8 }服务端接收文件时和普通上传文件时一样例如php代码if(!empty($_FILES)){ $file$_FILES[new_image]; //new_image 就是上面的fileFieldName echo $file[name]; move_uploaded_file($file[tmp_name],./zf/.$file[name]); die(); }4.显示上传进度1 var xhr new XMLHttpRequest(); 2 upload xhr.upload; 3 upload.addEventListener(progress, updateProgress, false);//updateProgress 处理上传进度 4 xhr.open(post, “服务端url”, true); 5 6 function updateProgress(evt) { 7 if (evt.lengthComputable) { 8 var percentComplete Math.round((evt.loaded * 100) / evt.total) 9 bug(percentComplete); 10 11 } 12 else { 13 // Unable to compute progress information since the total size is unknown 14 } 15 }

相关新闻

C语言 二维数组在内存中的存储

C语言 二维数组在内存中的存储

1.二维数组在内存中是怎么存储的?请问这个二维数组在内存中的布局?int arr[3][4] { {1,2,3,4,},{5,6,7,8},{9,10,11,12 } };你的答案是这样的吗。我们说这是我们想象的逻辑结构,那实际的布局,即物理结构是怎样的呢?in…

2026/7/5 15:00:27 阅读更多 →
手把手教你学Simulink——基于平均电流模式(Average Current Mode Control, ACMC)的双向 DC‑DC 变换器控制仿真

手把手教你学Simulink——基于平均电流模式(Average Current Mode Control, ACMC)的双向 DC‑DC 变换器控制仿真

目录 手把手教你学Simulink——基于平均电流模式(Average Current Mode Control, ACMC)的双向 DC‑DC 变换器控制仿真 一、为什么要用 平均电流模式控制(ACMC) 二、仿真目标** 三、主电路拓扑与参数** 3.1 拓扑(双向两象限 Buck‑Boost) 3.2 参数表 四、ACMC 控制框…

2026/7/5 15:00:27 阅读更多 →
告别格式障碍:SketchUp STL插件让你的3D设计轻松走进现实世界

告别格式障碍:SketchUp STL插件让你的3D设计轻松走进现实世界

告别格式障碍:SketchUp STL插件让你的3D设计轻松走进现实世界 【免费下载链接】sketchup-stl A SketchUp Ruby Extension that adds STL (STereoLithography) file format import and export. 项目地址: https://gitcode.com/gh_mirrors/sk/sketchup-stl 你是…

2026/7/5 14:58:26 阅读更多 →

最新新闻

MetaCodable宏编程入门:快速掌握Swift Codable高级用法

MetaCodable宏编程入门:快速掌握Swift Codable高级用法

MetaCodable宏编程入门:快速掌握Swift Codable高级用法 【免费下载链接】MetaCodable Supercharge Swifts Codable implementations with macros meta-programming. 项目地址: https://gitcode.com/gh_mirrors/me/MetaCodable 想要提升Swift开发效率&#xf…

2026/7/5 15:48:39 阅读更多 →
【信息科学与工程学】【数据中心】【容灾备份】第三十一篇 云数据中心各类CPU计算型业务跨数据中心容灾设计方案

【信息科学与工程学】【数据中心】【容灾备份】第三十一篇 云数据中心各类CPU计算型业务跨数据中心容灾设计方案

一、云数据中心各类CPU计算型业务跨数据中心指标 1. Web应用服务 设计领域 设计子类 特征/函数 参数/指标 用途说明 数据中心内设计 数据中心间设计 网络设计​ 数据中心内网络 1. 负载均衡网络 2. 应用层网络 3. 数据库网络 4. 缓存网络 5. 管理网络 1. 带宽:>…

2026/7/5 15:44:38 阅读更多 →
K-Means 聚类的目标函数:簇内误差平方和

K-Means 聚类的目标函数:簇内误差平方和

1. 什么是 K-Means? K-Means 是一种无监督、迭代式的聚类算法: 给定数据集 {x₁, x₂, …, xₙ} 与预设簇数 K,算法把样本划分为 K 个不相交的簇 C₁, C₂, …, Cₖ,使得同一簇内样本尽可能相似,不同簇间样本尽可能远离…

2026/7/5 15:44:38 阅读更多 →
【信息科学与工程学】计算机科学与自动化——第三十八篇 质量工程 02 云数据中心质量工程

【信息科学与工程学】计算机科学与自动化——第三十八篇 质量工程 02 云数据中心质量工程

云数据中心质量工程体系(规划-评估-测试-验证-交付) 编码 阶段 层级 核心领域 子领域 质量属性/活动 关键交付物/指标 核心方法/工具 评估标准 挑战与风险 1 核心理念 战略层 质量哲学 可靠性即产品 将数据中心可靠性、性能、安全作为可销售、可承诺的服务产品…

2026/7/5 15:42:38 阅读更多 →
net 跨平台也是一句谎言

net 跨平台也是一句谎言

以前很热炒跨平台,主要是由于硅谷挑战微软霸主地位的热情,但是冷静下来后,跨平台往往不是那么一回事。假设你有个软件,所谓的跨平台,你只需要为第二个平台上重新编译一次就行了,这样很难么? c语…

2026/7/5 15:40:38 阅读更多 →
终极指南:如何用CSUR程序化生成系统打造真实城市道路网络

终极指南:如何用CSUR程序化生成系统打造真实城市道路网络

终极指南:如何用CSUR程序化生成系统打造真实城市道路网络 【免费下载链接】CSUR Offline procedural generation of realistic road environments in Cities: Skylines 项目地址: https://gitcode.com/gh_mirrors/cs/CSUR Cities: Skylines Urban Road (CSUR…

2026/7/5 15:38:37 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻