拖图片进浏览器的时候阻止浏览器的默认行为(比如打开直接图片)

发布时间:2026/7/8 15:16:58

拖图片进浏览器的时候阻止浏览器的默认行为(比如打开直接图片)
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 }

相关新闻

MS10-018漏洞深度剖析:从内存破坏原理到Metasploit实战利用

MS10-018漏洞深度剖析:从内存破坏原理到Metasploit实战利用

2026/7/8 15:08:50

1. 项目概述:一次针对经典浏览器漏洞的深度剖析今天想和大家深入聊聊一个在渗透测试学习和实战演练中绕不开的经典案例:针对MS10-018漏洞的浏览器攻击。这个漏洞编号对于很多老手来说,可能承载着一段“远古”的记忆,但对于希望系统…

【observability】【evaluation16】RAGChecker评估框架分析

【observability】【evaluation16】RAGChecker评估框架分析

2026/7/7 3:02:14

案例目标本案例展示了如何使用RAGChecker评估框架对检索增强生成(RAG)系统进行细粒度评估。主要目标包括:介绍RAGChecker评估框架的核心功能和特点演示如何将RAGChecker与LlamaIndex集成使用展示如何使用RAGChecker的各种指标评估RAG系统性能说明如何选择特定的指标…

亚马逊证实对外销售自研 AI 芯片 Trainium,英伟达的垄断要被打破了吗?

亚马逊证实对外销售自研 AI 芯片 Trainium,英伟达的垄断要被打破了吗?

2026/7/5 15:03:51

亚马逊证实对外销售自研 AI 芯片 Trainium,英伟达的垄断要被打破了吗? 6 月 19 日,亚马逊高管证实正与潜在客户谈判,计划向第三方数据中心销售自研 AI 芯片 Trainium。这可能是英伟达在 AI 芯片市场面临的最直接挑战。 亚马逊的 A…

Revit 许可证紧张怎么判断:建筑机电协同时,问题常不在总套数而在项目高峰重叠

Revit 许可证紧张怎么判断:建筑机电协同时,问题常不在总套数而在项目高峰重叠

2026/7/8 15:08:29

摘要如果企业在没有完成使用分析的前提下就直接增购,往往会出现预算增加但利用率依旧偏低的情况。本文从高峰并发、模块结构、低效占用和历史趋势四个维度,分析为什么多数企业更适合先优化,再判断是否需要增购。 很多企业在管理 Revit 许可证…

openEuler Jenkins核心功能解析:8大检查项保障代码质量

openEuler Jenkins核心功能解析:8大检查项保障代码质量

2026/7/8 15:08:29

openEuler Jenkins核心功能解析:8大检查项保障代码质量 【免费下载链接】openeuler-jenkins This repository is used to store the jenkins scripts in openEuler community. 项目地址: https://gitcode.com/openeuler/openeuler-jenkins 前往项目官网免费下…

openEuler ROS多机通信:分布式机器人系统的部署与调试完整指南

openEuler ROS多机通信:分布式机器人系统的部署与调试完整指南

2026/7/8 15:08:29

openEuler ROS多机通信:分布式机器人系统的部署与调试完整指南 【免费下载链接】ros It provides ROS source for openEuler 项目地址: https://gitcode.com/openeuler/ros 前往项目官网免费下载:https://ar.openeuler.org/ar/ 在机器人技术快速…

Vision-Language-Action(VLA)模型:多模态理解与动作泛化的工程实践

Vision-Language-Action(VLA)模型:多模态理解与动作泛化的工程实践

2026/7/8 15:08:29

1. 项目概述:这不是又一个“看图说话”模型,而是让AI真正“动手做事”的底层范式跃迁Vision-Language-Action模型——这个标题里藏着过去三年多模态AI领域最实质性的突破方向。它不是把图像识别、文本生成、动作控制三块功能简单拼在一起的“乐高套装”&…

免费开源图片元数据管理器:ExifToolGUI完整使用指南

免费开源图片元数据管理器:ExifToolGUI完整使用指南

2026/7/8 15:08:29

免费开源图片元数据管理器:ExifToolGUI完整使用指南 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾经为成千上万张照片的管理而头疼?拍摄时间错乱、地点信息丢失、版权信息…

TPA3128D2与PIC18F86K22音频系统设计与优化

TPA3128D2与PIC18F86K22音频系统设计与优化

2026/7/8 14:58:29

1. TPA3128D2与PIC18F86K22的黄金组合解析在DIY音频设备领域,德州仪器的TPA3128D2 D类音频放大器与Microchip的PIC18F86K22微控制器堪称一对黄金搭档。这套组合能够为各类音频项目提供专业级的音质表现,从便携式蓝牙音箱到车载音响系统都能胜任。TPA3128…

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南

2026/7/8 0:44:47

解锁AMD Ryzen处理器深层性能:SMU Debug Tool完全指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…

6个月转型AI工程师:实战路径与核心技能

6个月转型AI工程师:实战路径与核心技能

2026/7/8 6:29:42

1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公…

YOLOv5模型剪枝与量化实战:边缘设备部署优化

YOLOv5模型剪枝与量化实战:边缘设备部署优化

2026/7/8 14:04:34

1. 项目背景与核心价值在计算机视觉领域,YOLOv5因其出色的实时检测性能成为工业界宠儿。但当我们尝试将其部署到边缘设备(如树莓派、Jetson Nano或手机终端)时,立刻会遇到两个致命问题:模型体积庞大(原始YO…

Qwen Code+Obsidian构建可执行的AI时代认知操作系统

Qwen Code+Obsidian构建可执行的AI时代认知操作系统

2026/7/8 0:07:15

1. 项目概述:这不是又一个笔记软件教程,而是一套可复用的“认知操作系统”搭建逻辑你有没有试过,在读完Andrej Karpathy那篇著名的《Software 2.0》之后,满脑子都是“神经网络即代码”的震撼,但合上网页,打…

校园服饰细分赛道测算程序,学生平价国风,机能穿搭市场规模预估。

校园服饰细分赛道测算程序,学生平价国风,机能穿搭市场规模预估。

2026/7/8 0:07:15

校园服饰细分赛道测算程序(Python)——学生平价国风 & 机能穿搭市场规模预估(TAM / SAM / SOM)一、实际应用场景描述(真实业务抽象)在《时尚产业与品牌创新》课程中,细分市场切入&#xff0…

Visual C++运行库完整解决方案:告别软件兼容性问题

Visual C++运行库完整解决方案:告别软件兼容性问题

2026/7/8 0:07:15

Visual C运行库完整解决方案:告别软件兼容性问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾为打开游戏时弹出的"DLL缺失"错误…