上传前获取文件大小、图片宽度和高度

2023-12-09

在上传到我的网站之前,如何使用 jQuery 或 JavaScript 获取文件大小、图像高度和宽度?


多张图片上传并带有信息数据预览

Using HTML5 和File API

使用示例URL API

图像源将是表示 Blob 对象的 URL
<img src="blob:null/026cceb9-edr4-4281-babb-b56cbf759a3d">

const EL_browse  = document.getElementById('browse');
const EL_preview = document.getElementById('preview');

const readImage  = file => {
  if ( !(/^image\/(png|jpe?g|gif)$/).test(file.type) )
    return EL_preview.insertAdjacentHTML('beforeend', `Unsupported format ${file.type}: ${file.name}<br>`);

  const img = new Image();
  img.addEventListener('load', () => {
    EL_preview.appendChild(img);
    EL_preview.insertAdjacentHTML('beforeend', `<div>${file.name} ${img.width}×${img.height} ${file.type} ${Math.round(file.size/1024)}KB<div>`);
    window.URL.revokeObjectURL(img.src); // Free some memory
  });
  img.src = window.URL.createObjectURL(file);
}

EL_browse.addEventListener('change', ev => {
  EL_preview.innerHTML = ''; // Remove old images and data
  const files = ev.target.files;
  if (!files || !files[0]) return alert('File upload not supported');
  [...files].forEach( readImage );
});
#preview img { max-height: 100px; }
<input id="browse" type="file" multiple>
<div id="preview"></div>

使用示例文件读取器API

如果您需要长 Base64 编码数据字符串的图像源
<img src="data:image/png;base64,iVBORw0KGg... ...lF/++TkSuQmCC=">

const EL_browse  = document.getElementById('browse');
const EL_preview = document.getElementById('preview');

const readImage = file => {
  if ( !(/^image\/(png|jpe?g|gif)$/).test(file.type) )
    return EL_preview.insertAdjacentHTML('beforeend', `<div>Unsupported format ${file.type}: ${file.name}</div>`);

  const reader = new FileReader();
  reader.addEventListener('load', () => {
    const img  = new Image();
    img.addEventListener('load', () => {
      EL_preview.appendChild(img);
      EL_preview.insertAdjacentHTML('beforeend', `<div>${file.name} ${img.width}×${img.height} ${file.type} ${Math.round(file.size/1024)}KB</div>`);
    });
    img.src = reader.result;
  });
  reader.readAsDataURL(file);  
};

EL_browse.addEventListener('change', ev => {
  EL_preview.innerHTML = ''; // Clear Preview
  const files = ev.target.files;
  if (!files || !files[0]) return alert('File upload not supported');
  [...files].forEach( readImage );
});
#preview img { max-height: 100px; }
<input id="browse" type="file"  multiple>
<div id="preview"></div>
  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上传前获取文件大小、图片宽度和高度 的相关文章

随机推荐

  • 找不到适用于 jdbc:h2:tcp 的驱动程序

    当我尝试使用 java Web 应用程序连接到 h2 数据库时 抛出 java sql SQLException No合适的驱动程序找到 jdbc h2 tcp localhost ZadatakDB 我可以毫无问题地使用 H2 控制台 并
  • 如何粘贴而不覆盖寄存器

    有谁知道一种方法可以粘贴到视觉上选择的区域而不将选择放置在默认寄存器中 I know I can solve the problem by always pasting from an explicit register But it s
  • IntelliJ Idea 使用错误的 git

    我无法让 git 与 IntelliJ IDEA 2022 3 1 终极版 一起使用MacOS Monterey 12 5 芯片 Apple M1 Pro git 可执行文件的路径 usr local bin git IntelliJ Id
  • 使用 Freemarker 解析 Spring MVC 中的视图 - 包括 jsp 页面

    使用 FreemarkerServlet 时 可以将 JSP 页面与 Freemarker 内容一起包含在内 但是 我在 Spring MVC 应用程序中使用 Freemarker 作为视图解析器 因此不使用 FreemarkerServl
  • 正则表达式搜索并替换为可选的复数

    我是正则表达式的新手 所以希望一些专家能够对我的问题打哈欠并给出一个简单的答案 我试图查找并替换以某个字母开头的单词 如果它们是复数 则保留它们的复数 因此 例如 我想将 boy 一词替换为 band 将 boys 替换为 bands te
  • TypeScript 导出和导入 尚未加载上下文的模块名称:_。使用 require([])

    当我尝试在浏览器中运行应用程序时 我在调试控制台窗口中收到以下消息 Module name Person has not been loaded yet for context Use require 当然 如果合并 ts 文件的内容 一切
  • PHP 安装程序脚本 [重复]

    这个问题在这里已经有答案了 可能的重复 我如何为网站创建安装程序 PHP mysql 我正在寻找使用 PHP 为稍微复杂的 Web 应用程序创建一个功能齐全的安装程序 基本上 您访问 URL setup php 系统会询问您一系列问题 在此
  • 如何将 cp1251 字节数组转换为 utf8 字符串?

    我们在手机上没有可用的 cp1251 代码页 因此 new String data cp1251 doesn t work 我们需要一个具有类似签名的函数 String ArrayCp1251toUTF8String byte data 首
  • JavaScript:我应该如何生成大量 HTML? [复制]

    这个问题在这里已经有答案了 可能的重复 是否有使用 javascript 生成 html 的最佳实践 我想用 JavaScript 生成网站的大部分内容 最简单的方法是形成一个包含所有 HTML 的大字符串 div span some te
  • MySQL - 如何限制每个 ID 一个结果?

    我有以下查询 它创建一个视图表 显示商店中最高的销售人员以及其他一些详细信息 CREATE OR REPLACE VIEW sales data AS SELECT s storename AS Store e employee name
  • event.preventDefault() 在 Chrome 和 Opera 中不起作用

    我正在使用 jQuery 验证插件 1 9 0 和 jQuery 1 7 2 我希望使用 jquery 验证插件来验证我的表单 它在 Firefox 20 0 1 和 IE 10 中运行良好 但在 Chrome 26 0 1410 64 m
  • 如何使用代号一存储?

    我正在尝试将我的 LWUIT 应用程序移植到代号一 我已经在 LWUIT 中使用了 RMS 现在显然我必须将其转换为存储 我不明白存储类在代号一中是如何工作的 代号一的文档也没有任何相关内容 1 存储文件的结构是怎样的 gt 在 J2ME
  • 选择“今天日期”的查询不起作用

    我试图从表文档中选择日期是今天的日期 我正在使用 Codeigniter 但它只显示这些没有时间的文档 我的意思是数据库日期中的位置是 2015 06 25 00 00 00 但它不会显示有小时的这些文档 例如 2015 06 25 08
  • IBM Worklight Android 4.4 问题,JSON Store 停止工作

    我刚刚将 N4 升级到 Kitkat 并测试了一些使用 IBM Worklight 开发的旧应用程序 让我震惊的是JSON 存储停止工作 我正在提交以下日志 请检查 还有其他人面临同样的问题吗 11 27 11 48 03 078 I js
  • 为索引列表生成 CREATE 脚本

    作为排序规则更改练习的一部分 我有一个索引列表 122 需要删除然后重新创建 如何重新创建这些索引 而不必每次都通过 GUI 并将其编写脚本到查询窗口 我的索引列表是从此脚本获取的 WITH indexCTE AS SELECT Table
  • Elasticsearch:小时分钟秒映射返回空数据

    下面是我为搜索字段创建的映射 PUT sample mapping properties webDateTime1 type date format dd MM yyyy HH mm ss dd MM yyyy hour minute se
  • 将数据放入 gridview 的第二行

    我正在使用 foreach 循环将数据插入到 gridview 中 如下所示 foreach GridViewRow row in grvbillDetail Rows row text row text row int row int 我
  • Travis 与 Firebase 部署 TypeError:this.stream.clearLine 不是函数

    我正在尝试使用 Travis 构建和部署 NodeJs Python 应用程序 这大约是文件夹结构 所有内容都属于同一个存储库 main angular2 client dist node modules django server ser
  • 如何在Python中调用超级构造函数?

    class A def init self print world class B A def init self print hello B output hello 在我使用过的所有其他语言中 超级构造函数都是隐式调用的 如何在 Pyt
  • 上传前获取文件大小、图片宽度和高度

    在上传到我的网站之前 如何使用 jQuery 或 JavaScript 获取文件大小 图像高度和宽度 多张图片上传并带有信息数据预览 Using HTML5 和File API 使用示例URL API 图像源将是表示 Blob 对象的 UR