js vue上传文件判断文件格式 GIF JPG PNG

2023-11-14

根据文件识别头信息获取图片文件的类型:

JPG:
文件头标识: FF D8 文件尾标识: FF D9

PNG:
文件头标识 (8 bytes) 89 50 4E 47 0D 0A 1A 0A

GIF:
文件头标识 (6 bytes) 47 49 46 38 37 61 or 47 49 46 38 39 61

vue上传文件判断文件格式 GIF JPG PNG:

<template>
  <div>
    <div ref="drag" id='drag' @drop="bindEvents" @dragover="onDragover">
      <input type="file" name="file" @change="handleFileChange">
    </div>
    <button @click="uploadFile">上传文件</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      file: null
    }
  },
  methods: {
    onDragover(event) {
      event.preventDefault()
    },
    bindEvents(event) {
      event.preventDefault();
      const [ file ] = event.dataTransfer.files
      this.file = file
    },
    async uploadFile() {
      if (!await this.isImage(this.file)) { //判断是否是图片
        alert('文件格式不对!')
        return
      }
      const form = new FormData()
      form.append('name', 'file')
      form.append('file', this.file)
      const res = await this.$http.post('/uploadfile', form)
    },
    handleFileChange(e) {
      const [ file ] = e.target.files
      if (!file) return
      this.file = file
    },
    async isImage(file) {
      return await this.isGif(file) || await this.isPng(file) || await this.isJpg(file)
    },
    blobToString(blob) {
      return new Promise(reslove => {
        const reader = new FileReader()
        reader.onload = function() {
          const ret = reader.result.split('')
                      .map(v => v.charCodeAt())
                      .map(v => v.toString(16).toUpperCase())
                      .join(' ')                   
          reslove(ret)
        }
        reader.readAsBinaryString(blob) // 开启读取
      })
    },
    async isPng(file) { //判断是否是png
      const ret = await this.blobToString(file.slice(0, 8))
      return (ret === '89 50 4E 47 D A 1A A')
    },
    async isJpg(file) { //判断是否是jpg
      const len = file.size
      const start = await this.blobToString(file.slice(0, 2))
      const tail = await this.blobToString(file.slice(-2, len))
      return (start === 'FF D8') && (tail == 'FF D9')
    },
    async isGif(file) { //判断是否是gif
      // GIF89a 和 GIF87a
      // 前面6个16进制, '47 49 46 38 39 61' or '47 49 46 38 37 61'
      const ret = await this.blobToString(file.slice(0, 6))
      return (ret === '47 49 46 38 39 61') || (ret === '47 49 46 38 37 61')
    },
  }
}
</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js vue上传文件判断文件格式 GIF JPG PNG 的相关文章

  • 代码如何从 Android Gallery 加载图像

    我有用于从图库加载图像的代码 但我真的不明白它是如何工作的 这是代码 Override protected void onActivityResult int requestCode int resultCode Intent data s
  • 如何使用 python(版本 2.5)压缩文件夹的内容?

    一旦我在特定文件夹中拥有了所需的所有文件 我希望我的 python 脚本能够压缩文件夹内容 这可能吗 我该如何去做呢 在 python 2 7 上你可以使用 Shutil make archive base name 格式 root dir
  • 当前平台不支持桌面 API

    我遇到过这个错误 java lang UnsupportedOperationException 当前平台不支持桌面 API 我将从我的 java 应用程序中打开一个文件 我用这个方法 Desktop getDesktop open new
  • 将 Django 的 FileField 设置为现有文件

    我在磁盘上有一个现有文件 例如 folder file txt 在 Django 中有一个 FileField 模型字段 当我做 instance field File file folder file txt instance save
  • c 使用 lseek 以相反顺序复制文件

    我已经知道如何从一开始就将一个文件复制到另一个文件 但是我如何修改程序以按相反的顺序复制它 源文件应具有读取访问权限 目标文件应具有读写执行权限 我必须使用文件控制库 例如 FILE A File B should be ABCDEF FE
  • Caffe 多输入图像

    我正在考虑实现一个 Caffe CNN 它接受两个输入图像和一个标签 后来可能是其他数据 并且想知道是否有人知道 prototxt 文件中执行此操作的正确语法 它只是一个带有额外顶部的 IMAGE DATA 层吗 或者我应该为每个层使用单独
  • 如何将设备上未保存的图片上传到dropbox帐户?(IOS)

    Dropbox RestClient 仅保存文件 所以我想先将图像保存在本地文件夹中 然后上传它 结果它保存了文件 但它已损坏 NSString localPath NSBundle mainBundle pathForResource I
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 如何使用 Keras ImageDataGenerator 预测单个图像?

    我已经训练 CNN 对图像进行 3 类分类 在训练模型时 我使用 keras 的 ImageDataGenerator 类对图像应用预处理功能并重新缩放它 现在我的网络在测试集上训练得非常准确 但我不知道如何在单图像预测上应用预处理功能 如
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • 处理大文件的最快方法?

    我有多个 3 GB 制表符分隔文件 每个文件中有 2000 万行 所有行都必须独立处理 任何两行之间没有关系 我的问题是 什么会更快 逐行阅读 with open as infile for line in infile 将文件分块读入内存
  • 来自 csv.read 模拟文件的 rspec 测试结果

    我正在使用 ruby 1 9 并且正在尝试执行 BDD 我的第一个测试 应该在 csv 中读取 有效 但第二个测试 我需要模拟文件对象 却不起作用 这是我的型号规格 require spec helper describe Person d
  • 如何使用 PHP 从 MSSQL 读取图像字段

    我正在创建一个网站 需要同步从离线 MSSQL 服务器读取的在线 MySQL 数据库 除图像字段外 所有通信和从 MSSQL 读取所有字段均工作正常 我已经使用 PHP 和 Mysql 一段时间了 知道如何向 MySQL 数据库插入 检索图
  • 是否可以通过 UIActivityViewController 共享图像并保留 exif 数据?

    我有一个应用程序 可以通过以下方式将图像保存到相机胶卷中的自定义相册中 library writeImageToSavedPhotosAlbum newTestImage CGImage metadata metadata completi
  • Drupal 8 图像与图像样式

    在drupal 7中 我使用函数image style url style uri 生成具有样式的新图像并返回图像的路径 那么在 drupal 8 中会用什么来代替它呢 谢谢 Per the 变更记录 https www drupal or
  • 是否可以在通过表单上传本地图像之前预览它们?

    更具体地说 我想使用一种带有一个或多个用于图像的文件输入字段的表单 当这些字段发生更改时 我想在将数据发送到服务器之前显示关联图像的预览 我尝试过多种 JavaScript 方法 但总是遇到安全错误 我不介意使用 java 或 flash
  • 如何在SQL Server数据库表列中存储图像[重复]

    这个问题在这里已经有答案了 我有一张名为FEMALE在我的数据库中 它有ID as Primary Key 它有一个Image column 我的问题是如何使用 SQL 查询存储图像 尝试一下 insert into tableName I
  • iOS 4.2.1 丢失文件?

    这是我第一次使用最新的 xcode 3 2 5 和新的 iOS 4 2 1 当我在设备上运行应用程序时 我收到以下运行时错误 无法读取 Developer Platforms iPhoneOS platform DeviceSupport
  • 如何移动图像(动画)?

    我正在尝试在 x 轴上移动船 还没有键盘 我如何将运动 动画与boat png而不是任何其他图像 public class Mama extends Applet implements Runnable int width height i
  • Kotlin:使用 Picasso 从 flickr 加载图像时出现错误 503

    我的应用程序使用 Android 的 Picasso 库从 flickr 加载图像 奇怪的是 不久前将我的应用程序迁移到 Kotlin 后 它工作得很好 但现在我开始出现 随机 503 错误 我已经在 flickr 控制面板中为每个图像设置

随机推荐

  • TPS5430DCDC芯片24V转8V电路设计

    文章目录 前言 一 确定参数指标 二 设计步骤 1 输入电容器 2 输出滤波器件 1 电感取值 2 电容取值 3 输出电压设定点 4 BOOT电容器 总结和结果 前言 因实际需要 需设计一个将24V电压转成5V电压的电路 用于给放大器供电
  • 【novelai】colab存档

    本笔记由此改写而成 https colab research google com drive 1kw3egmSn KgWsikYvOMjJkVDsPLjEMzl https colab research google com drive
  • 全栈工程师必备技能与工具大全

    全栈工程师是在前端和后端 Web 开发方面具有专业知识的专业人士 他们对各种编程语言 框架和工具有深入的了解 从无到有创建 Web 应用程序 包括设计 开发 测试和维护 据Glassdoor的调研数据显示 在美国 全栈工程师的平均年薪为11
  • 2022-渗透测试-6个最常用的工具

    目录 1 Wireshark 2 Metasploit 3 Nmap 4 Nessus 5 SQL Map 6 W3af 大家可以关注关注我的公众号 定期分享一些干货 直接搜索 小白渗透测试 或者扫描下面的二维码就可以了 1 Wiresha
  • selenium练习校验

    selenium校验 1 获取网站URL是否正确 print driver current url 得到当前页面URL 2 获取网站Title是否正确 print driver title 3 获取浏览器版本号 print driver c
  • 使用github搭建博客出现的问题:Jekyll主题下push文章到github上没有生效

    因为自己也用过github搭建免费的博客项目 由于搭建的日子距离现在已经有些久远了 现在又重新拾起来搞个人博客 遇到下面的问题 问题描述 在使用Jekyll主题的时候 在本地使用Ruby服务端能运行起来 但是将文件push到github上
  • 2021数维杯国际赛论文模板发布,LaTeX+Word

    对于数学建模竞赛 最后提交的结果就是一篇论文 先不说论文内容怎么样 首先论文的版式需要美观 漂亮 简洁 对于论文排版 LaTeX比word更便捷专业 使用LaTeX排版的论文清晰美观 可以得到阅卷老师的青睐 增加获奖几率 提前准备好模板是非
  • react ant icon的简单使用

    refer 快速上手 Ant Design 1 引入ant npm install antd save 2 在页面引用 import StarOutlined from ant design icons 如果想要引入多个icon 可以这样书
  • 使用vite + vue3 + ant-design-vue + vue-router + vuex 创建一个后台管理应用

    使用vite vue3 ant design vue vue router vuex 创建一个管理应用的记录 使用vite 创建项目 我创建的node 版本是 v16 17 1 使用NPM 或者 YARN 安装中选择模板和定义项目名称 np
  • Tokenview X-ray功能:深入探索EVM系列浏览器的全新视角

    Tokenview作为一家领先的多链区块浏览器 为了进一步优化区块链用户的使用体验 我们推出了X ray 余额透视 功能 该功能将帮助您深入了解EVM系列浏览器上每个地址的交易过程 以一种直观 简洁的方式呈现地址的进出账情况 让您轻松掌握资
  • 技术实践干货:从零开始创建Node.js应用

    作为一个程序员 我们常常会有很多想法和创意 然后用技术实现出来 这是一个很有成就感的事情 在实践过程中 会发现很多想法都不能很好地落地 可能是技术 可能是团队氛围等等 于是就开始想着能够不能有一个框架去承载这些想法 其实在Node js这个
  • 解决宝塔面板打开不了登录界面问题或xshell界面显示的宝塔登录地址是空的的问题

    问题描述 某天重开电脑之后 在浏览器打开宝塔面板页面时 提示请使用正确的入口登录面版 如下图 解决方案 正常情况下把查看面板入口的命令给复制到xshell里面 他就会返回给你登录地址 用户名 密码 然后你复制地址重新登录就可以了 如果你在x
  • Android完全退出应用程序 ,【Android面试题】

    activity finish activityStack remove activity activity null 获得当前栈顶Activity public Activity currentActivity Activity acti
  • Vue自定义指令的使用详解

    自定义指令 vue官方提供了v text v for v model v if等常用的指令 还允许开发者自定义指令 在使用自定义指令前 须在自定义名称前加v 名称 私有自定义指令
  • android audio/linux alsa音频-硬件

    接着以前的文章继续写音频方面的分析 因为学得快忘得也快 如果不加以总结和记录 很快自己也不记得了 要完全了解一个音频器件 如ES8396 wm8998 首先得了解它的硬件原理 一般在嵌入式领域 音频的编解码芯片主要有两种 1 在单片机应用方
  • I/O接口

    I O接口 结构和作用 数据缓冲寄存器DBR 暂存即将输入输出的数据 主机和外设的速度匹配 状态 控制寄存器 命令字 CPU对设备发出的具体命令 状态字 设备的状态信息 供CPU检查 串 并转换机构 数据格式的转换 I O控制逻辑 根据命令
  • 网络QoS解决方案

    网络QoS解决方案 在网络带宽不足时 对网络流量做区别服务 优先传输那些重要的 要求网络延迟小的 如果丢弃会导致更大业务代价的数据 并对不同应用的数据做合理的带宽分配与控制 如果一定需要丢弃一些数据 则丢弃那些代价比较低的 这就是网络 Qo
  • pnpm install出现:ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies

    使用 pnpm install 安装项目依赖时出现 ERR PNPM PEER DEP ISSUES Unmet peer dependencies 在 pnpm github issues 中找到相关解决方案 一 前言 完整日志 ERR
  • Git修改IP重新定位的方法

    进入已clone项目的 git文件夹 打开config文件 打开config 如图显示 修改url中的IP为192 168 6 102 然后保存 在项目上右击选择属性 R 然后选择Git 即可看到当前项目的跟踪远端网址 转载于 https
  • js vue上传文件判断文件格式 GIF JPG PNG

    根据文件识别头信息获取图片文件的类型 JPG 文件头标识 FF D8 文件尾标识 FF D9 PNG 文件头标识 8 bytes 89 50 4E 47 0D 0A 1A 0A GIF 文件头标识 6 bytes 47 49 46 38 3