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

发布时间:2026/8/26 18:47:52

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

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

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

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

2026/8/25 6:05:59

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

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

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

2026/8/26 9:11:47

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

深入理解 AI Agent · AGENT #03:从单 Agent 到多 Agent

深入理解 AI Agent · AGENT #03:从单 Agent 到多 Agent

2026/8/26 18:46:41

📘 《深入理解 AI Agent》系列 第八篇 | AGENT-03 前篇回顾:Agent 基础篇 #01 从LLM到Agent → Agent 基础篇 #02 四大核心机制 → Agent 基础篇 #03 从单Agent到多Agent 开篇:单 Agent 能走多远? 做 AI Agent 的开发者常有一个…

Django金融时间序列数据中的异常检测与风险预警系统设计与实现机器学习选题方向大数据毕设项目

Django金融时间序列数据中的异常检测与风险预警系统设计与实现机器学习选题方向大数据毕设项目

2026/8/26 18:46:41

3.2系统可行性分析3.2.1 技术可行性​在数据处理技术方面,Python 拥有丰富的数据分析库,如 Pandas、NumPy 等,能够高效处理金融时间序列数据中的清洗、插值、标准化等任务。对于异常检测算法,无论是基于统计的 3σ 准则、贝叶斯推…

Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战

Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战

2026/8/26 18:46:41

Yolo 小白入门 08:图片、视频、摄像头、RTSP 一次搞清——source 参数实战 [!NOTE] 你现在位于《Yolo 全速入门到精通【持续更新中】》的 第一章 零基础跑通。这一篇不追求堆满参数,而是带你设计“多种输入源”的最小可验证闭环,并能说清它在数据、模型与业务之间的位置。我…

Java 程序员第 46 阶段15:大模型调用链路追踪,SkyWalking 排查线上性能,集群部署实战OAP集群加高可用存储落地

Java 程序员第 46 阶段15:大模型调用链路追踪,SkyWalking 排查线上性能,集群部署实战OAP集群加高可用存储落地

2026/8/26 18:46:41

前面 14 篇我们已经把大模型链路的采集、拆解、关联、告警、存储选型全部打通。但所有这些能力都建立在一个前提上:SkyWalking 自身是稳定可用的。如果 OAP 是单节点,它一宕机,全公司的链路监控就黑屏,正在发生的大模型事故你将完…

Codex 客户端接入 88API:Windows、macOS 和 Linux 配置教程

Codex 客户端接入 88API:Windows、macOS 和 Linux 配置教程

2026/8/26 18:46:41

文章说明 本文适用于会读取本机 ~/.codex 配置目录的 Codex 桌面客户端、IDE 插件及相关客户端。部分只支持 Codex 账号登录的云端入口不能填写第三方 API 地址,不适用本教程。 实际可用模型请以 88API 控制台为准。下面使用 88API 文档当前示例模型 5.6-sol 演示。…

如何安装dsh deepseek harness

如何安装dsh deepseek harness

2026/8/26 18:36:41

目录 安装 nvm 安装dsh 使用npx deepseek-ai/dsh weba安装 使用git clone https://github.com/deepseek-ai/deepseek-harness.git 下载到本地安装 准备工作: 1:首先去存盘里找到文件夹 2:在输入框中打上cmd ​编辑 指令的输入 1&am…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…