首页 程序笔记 如何判断file input的文件来自存储还是相机?

如何判断file input的文件来自存储还是相机?

在前端中,可以使用 JavaScript 来判断 file input 的文件是来自存储还是相机。可以通过判断文件的元数据信息以及文件的 lastModified 属性值来判断文件的来源。

以下是一个示例代码,演示如何使用 JavaScript 判断 file input 的文件来自存储还是相机:

<!DOCTYPE html>
<html>
<head>
  <title>判断文件来源示例</title>
  <script>
    function handleFileSelect(evt) {
      var file = evt.target.files[0];
      var isFromCamera = false;
      var isFromStorage = false;
      
      // 判断文件的元数据信息
      if (file.type.indexOf('image/') === 0) {
        var img = new Image();
        img.onload = function() {
          isFromCamera = img.width > 0 && img.height > 0;
          isFromStorage = !isFromCamera && file.lastModified;
          console.log('文件来源:' + (isFromCamera ? '相机' : '存储设备'));
        };
        img.src = URL.createObjectURL(file);
      }
      else {
        isFromStorage = file.lastModified;
        console.log('文件来源:存储设备');
      }
    }

    document.getElementById('file-input').addEventListener('change', handleFileSelect, false);
  </script>
</head>
<body>
  <input type="file" id="file-input" accept="image/*">
</body>
</html>

另外,从相机中获取的文件通常会包含一些特殊的元数据信息,比如 EXIF 数据,可以通过 JavaScript 库来解析这些信息,从而判断文件的来源。可以使用 exif-js 或 piexif.js 等库来解析这些元数据。

以下是一个示例代码,演示如何使用 lastModified 属性和 exif-js 库来判断文件的来源:

<!DOCTYPE html>
<html>
<head>
  <title>判断文件来源示例</title>
  <script src="https://cdn.jsdelivr.net/npm/exif-js"></script>
  <script>
    function handleFileSelect(evt) {
      var file = evt.target.files[0];
      var reader = new FileReader();
      reader.onload = function(e) {
        var exifData = EXIF.readFromBinaryFile(new BinaryFile(e.target.result));
        var isFromCamera = exifData && exifData.Make && exifData.Model;
        var isFromStorage = !isFromCamera && file.lastModified;
        console.log('文件来源:' + (isFromCamera ? '相机' : '存储设备'));
      };
      reader.readAsBinaryString(file);
    }

    document.getElementById('file-input').addEventListener('change', handleFileSelect, false);
  </script>
</head>
<body>
  <input type="file" id="file-input" accept="image/*">
</body>
</html>

这个示例代码中,我们使用了 exif-js 库来读取文件的元数据信息,判断文件是否来自相机。如果文件包含 Make 和 Model 字段,说明该文件来自相机,否则认为它来自存储设备。如果文件没有元数据信息,我们则使用 lastModified 属性来判断文件是否来自存储设备。

如果有更好的办法欢迎留言分享。

3

站心网

在前端中,可以使用 JavaScript 来判断 file input 的文件是来自存储还是相机。可以通过判断文件的元数据信..

为您推荐

.NET 主程序的.dll.config文件有什么用?

.dll.config 文件通常是在开发过程中自动生成的,它的主要作用是为某个类库(.dll 文件)提供一个独立的配置文件,以便开发者可以为该类库单独定义或测试配置项。以下是生成 .dll.config 文件的原因和机制:1. 配置..

.NET C#连接FTP实现文件上传下载

在 .NET 中可以使用 System.Net.FtpWebRequest 类来连接 FTP 服务器,实现文件上传和下载。以下是实现文件上传和下载的完整代码示例。1. 上传文件到 FTP 服务器using System;using System.IO;using System.Net;class..

.net 通过 HttpClient 下载文件同时报告进度的方法

通过 HttpClient 的 ContentLength 很多时候都可以拿到下载的内容的长度,通过 ReadAsync 可以返回当前读到的长度,将读取到的长度加起来就是已经下载的长度看起来很简单,于是直接给代码private static async Task ..

ASP.NET如何将Views文件夹从项目分离

将 Views 文件夹从 ASP.NET 项目中分离是一个常见需求,比如为了实现模块化或分层架构。以下是实现此功能的完整步骤,从项目中分离 Views 文件夹,将其移到另一个独立的文件夹或项目中,并确保视图渲染仍然正常。1. ..

.NET C# 读取编辑.AVIF图片文件

在 .NET 中读取和编辑 .AVIF 图片文件需要特定的库支持,因为 System.Drawing 等内置功能不直接支持 AVIF 格式。目前可以通过以下方式在 .NET 中实现对 AVIF 文件的读取和编辑:方法一:使用 ImageMagick 的 .NET 封..

.NET C# SkiaSharp读取.AVIF图片文件报错

SkiaSharp 目前对 .AVIF 格式的支持可能依赖于具体的版本和底层库的配置。如果在使用 SkiaSharp 时尝试读取 .AVIF 文件报错,以下是一些可能的原因和解决方案:1. 检查 SkiaSharp 的版本SkiaSharp 的支持功能取决于..

如何让AI写出Google认可的文章?

让 AI 写出 Google 认可的文章,核心在于满足 Google 的搜索排名算法要求。这些要求通常围绕以下几个关键点展开:内容质量、用户体验 和 SEO 优化。以下是详细指导:一、内容质量确保文章原创且有价值避免抄袭:Goog..

无法加载文件或程序集 'XXXXX' 或其依赖项。访问被拒绝

遇到 “无法加载文件或程序集 'XXXXX' 或其依赖项。访问被拒绝” 错误时,通常是由于权限问题或文件夹、程序集引用配置不当所引起。下面是一些常见的原因及解决方法:1. 文件或程序集权限问题如果服务器或..

如何从.NET Framework迁移到.NET Core或.NET 6/7?

从 .NET Framework 迁移到 .NET Core 或 .NET 6/7 是一个提升性能和跨平台能力的关键过程。以下是迁移的主要步骤和注意事项:迁移步骤1. 评估当前项目依赖项检查:确保所有第三方库和NuGet包都有与 .NET Core/.NET 6..

如何优化ASP.NET Core应用的性能?

优化ASP.NET Core应用性能需要从代码、数据库、配置、服务器和部署等多个层面进行综合考虑。以下是一些优化ASP.NET Core应用性能的关键方法和技巧:1. 代码级优化使用异步编程:避免阻塞线程,通过async和await处理I..

token存放在localStorage还是cookie里?

在选择将令牌存放在 localStorage 或 cookie 时,需要综合考虑安全性、使用场景和潜在威胁。以下是对两种方式的对比分析,以及在不同场景下的建议。1. 存放在 localStorage优点:易用性:localStorage 使用简单,数..

chrome 开发者工具如何查看元素:hover时的样式

在 Chrome 开发者工具中查看元素的 :hover 样式,可以通过以下步骤实现:打开开发者工具:右键点击页面中的元素,然后选择“检查(Inspect)”或按下 F12 或 Ctrl + Shift + I (Windows) / Cmd + Option +..

文件上传JavaScript库FilePond使用教程

传统的文件上传控件往往显得笨拙且不够用户友好。FilePond的出现,为Web文件上传带来了革命性的改变。本文将详细介绍FilePond这一JavaScript库,探讨它如何优化文件上传流程,并提供无与伦比的用户体验。什么是FileP..

Web应用安全之八种安全的文件上传方式

为了让最终用户将文件上传到您的网站,就像是给危及您的服务器的恶意用户打开了另一扇门。即便如此,在今天的现代互联网的Web应用程序,它是一种常见的要求,因为它有助于提高您的业务效率。在Facebook和Twitter等..

如何防止web应用DOS攻击?

防止web应用DOS攻击的最好的方法是什么? 如何防止web应用DOS攻击? 与所有的拒绝服务(DOS)攻击相关的一件事是他们都不可能避免。最好的方法是把重点放在减少影响DOS攻击的方法上。如果你有一个网络,黑客想要玩一玩..

数据库SQL Server2014和SQL Server2019的区别和如何选择?

SQL Server 2014和SQL Server 2019是微软公司发布的两个版本的数据库管理系统,它们在性能、安全性以及可扩展性等方面各有特点。在选择这两个数据库版本时,需要根据系统需求、预算状况以及技术团队的熟悉程度等因素..

判断 nginx 服务是否启动,未启动自动重启 shell脚本

我的是宝塔面板直接上代码nginx_procnum=`ps -ef|grep "nginx"|grep -v grep|wc -l`if [ $nginx_procnum -eq 0 ]then echo "start nginx..." /etc/init.d/nginx startelse echo "no cmd" fi然后添加定时任务;每分钟..

WebClient上传文件方法UploadFile

测试环境 服务器端:Windows Server 2003,IIS6.0. 上传文件的代码: [csharp] view plaincopy在CODE上查看代码片派生到我的代码片 using (WebClient client = new WebClient() { Credentials = CredentialCache.De..

_ViewStart.cshtml文件的作用

在ASP.NET MVC 3.0中,新建项目后,Views目录下会出现一个这样的文件:_ViewStart.cshtml(对应Razor,C#,也可能是_ViewStart.vbhtml) 。 _ViewStart.cshtml这个文件会在所有View(.cshtml)被执行之前执行,主要..

MySQL如何建数据库

MySQL是一款非常流行的关系型数据库管理系统。无论是在企业还是个人项目中,都经常使用MySQL数据库。在使用MySQL之前,需要先创建一个数据库。本文将介绍如何建立MySQL数据库。一、安装MySQL在开始建立MySQL数据库之..

发表回复

返回顶部