首页经验JAVAscript输入语句 javascript提交数据

JAVAscript输入语句 javascript提交数据

圆圆2025-11-27 13:01:26次浏览条评论

JavaScript/TypeScript 文件上传:实现图片尺寸验证教程

文件上传是web应用中常见的交互功能、和用户体验的关键阶段。特别是在处理图片上传时,限制图片的大小(宽下载以下:javascript/typescript环境下,实现对上传图片大小的有效验证。核心原理:获取图片尺寸

要在浏览器环境中,获取一个本地文件(File Image对象和URL.createObjectURL)方法。URL.createObjectURL(file):这个方法会创建一个 DOMString,其中包含一个 URL,该 URL 可用于表示 File 或 Blob 对象的内容。这个 URL 是一个临时的、唯一的 URL,像常规 URL 一样可以在 lt;imggt;标签的 src CreateObjectURL URL.img.onload:当图片成功加载后,图像对象的宽度和高度 下载 URL: URL.revokeObjectURL(url) URL。 revokeObjectURL 来撤销之前创建的对象URL。

以下是获取图片尺寸的基础代码示例://假设x是一个File对象 if (x?.type.includes('image/')) { const url = URL.createObjectURL(x); // 创建一个临时的对象URL const img = new Image(); img.onload = function () { console.log(`图片宽度: ${img.width},图片高度: ${img.height}`); URL.revokeObjectURL(img.src); // 释放内存 }; img.onerror = function () { console.error('图片加载失败'); URL.revokeObjectURL(img.src); //即使失败也要释放 }; img.src = url; // 步封装尺寸获取为可等待方法

由于 img.onload JavaScript/TypeScript Promise的方法。这样,我们就可以使用async/await 来“同步”地等待尺寸结果。/** * 从 File 对象中异步获取图片的宽度和高度。 * @param file - 要获取尺寸的 File 对象。 * @returns 一个 Promise,解析为包含 width 和 height 的对象。

*/function getDimensions(file: File): Promiselt;{ width: number; height: number }gt; { return new Promise((resolve,reject) =gt; { if (!file.type.includes('image/')) {reject(new Error('非图片文件')); return; } const url = URL.createObjectURL(file); const img = new Image(); img.onload = () =gt; { URL.revokeObjectURL(img.src); // 释放内存resolve({ width: img.width, height: img.height }); }; img.onerror = () =gt; { URL.revokeObjectURL(img.src); //即使加载失败也要释放reject(new Error('图片加载失败或无法获取大小')); }; img.src = url; });}登录后复制集成图片尺寸验证到文件上传验证器

在前端框架(如 Angular)中,验证器通常是同步函数,返回 ValidationErrors |然而,在验证器内部执行此操作,该验证器本身也需要是异步的:Promiselt;ValidationErrors | null。 nullgt;或 Observablelt;ValidationErrors | nullgt;。

立即学习“Java免费学习笔记(深入)”;Typewise.app

面向客户服务和销售团队的AI写作解决方案。39页

下面我们将创建一个异步验证器,将结合文件大小验证和图片尺寸验证。

import { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';//假设 IUploadFileControl 是你的文件上传控件值类型,allFiles 包含文件缓存接口 IUploadFileControl { allFiles: File[]; // ...其他属性}const VALIDATION_LABEL_ATTACHMENT_MAX_SIZE = '文件大小超出限制';const VALIDATION_LABEL_IMAGE_DIMENSIONS = '图片尺寸不符合要求';/** * 从 File 对象中异步获取图片的宽度和高度。 * @param file - 要获取尺寸的 File 对象。 * @returns 一个 Promise,解析为包含 width 和 height 的对象。 */function getDimensions(file: File): Promiselt;{ width: number; height: number }gt; { return new Promise((resolve, return) =gt; { if (!file.type.includes('image/')) { //拒绝(新)。 Error('非图片文件')); return; } const url = URL.createObjectURL(file); const img = new Image(); img.onload = () =gt; { URL.revokeObjectURL(img.src);resolve({ width: img.width, height: img.height }); }; img.onerror = () =gt; { URL.revokeObjectURL(img.src); return(new Error('图片加载失败或无法获取尺寸')); }; img.src = url; });}/** * * @param maxFileSize - 允许的最大文件大小(字节)。 * @param maxWidth - 允许的最大图片宽度。 * @param maxHeight - 允许的最大图片高度。 * @returns 一个 AsyncValidatorFn。

*/ export const filesDimensionAndSizeValidator = (maxFileSize: number,maxWidth: number,maxHeight: number): AsyncValidatorFn =gt; async (control: AbstractControl): Promiselt;ValidationErrors | nullgt; =gt; { const value: IUploadFileControl = control.value; if (value == null || value.allFiles.length === 0) { return null; // 没有文件,无需验证 } for (const x of value.allFiles) { // 1.文件大小验证 if (x.size gt; maxFileSize) { return { file_max_size: VALIDATION_LABEL_ATTACHMENT_MAX_SIZE }; } // 2. 图片尺寸验证 (仅对图片文件) if (x.type.includes('image/')) { try { const { width, height } = wait getDimensions(x); if (width gt; maxWidth || height gt; maxHeight) { return { image_dimensions: VALIDATION_LABEL_IMAGE_DIMENSIONS }; } } catch (error) { // File: console.error(`处理文件${x.name}时出错:`, error); // return { image_processing_error: } } } return null; // 所有文件通过验证 };登录后复制

使用示例:

在 Angular 的 FormBuilder 或 FormControl 中使用此异步验证器:import { FormBuilder, Validators } from '@angular/forms';// ...constructor(private fb: FormBuilder) { this.uploadForm = this.fb.group({ // 假设'fileUploader' 是你的文件上传控件名称 fileUploader: [ null, // 同步验证器(如果需要) // [Validators.required],

// 矫形验证器 [filesDimensionAndSizeValidator(5 * 1024 * 1024, 1920, 1080)] // 5MB, 1920x1080 ] });}// AsyncValidatorFn Promise 或 Observable.在尝试获取图片尺寸之前,始终通过 file.type 文件大小 file.type.includes('image/'))。这样可以避免对非图片文件创建Image URL.revokeObjectURL(img.src) URL.createObjectURL 新的对象引用。如果不及时释放,尤其是在说明:图片来自:常快)在 getDimensions 方法中,我们添加了 onerror 处理和 try...catch 块来捕获图片加载失败或其他处理错误。根据需求,您可以选择在图片加载失败时返回特定的验证错误,或者正常记录错误并允许上传(如果图片尺寸不是验证强制项? 如果上传组件支持多文件,确保你的验证器能够包含对allFiles的遍历的考虑。性能:对于极大量的图片文件,同步地等待每一个getDimensions Promise Download Promise.all ImageObject和URL.createObjectURL结合Promise Images:联系我们,可以保证在文件上传前就满足所有后台的尺寸要求,从而提升应用的数据质量和用户体验。在实现过程中,MIME

以上就是JavaScript/TypeScript文件上传:相关标签: javascript java 前端 typescript 浏览器 字节 ai red JavaScript typescript 角前端框架 NULL 封装 try catch 线程主线程对象 事件承诺 异步 ui 大家都看: JavaScript中多按钮事件处理与函数动态映射指南JavaScript图形编程_Canvas与WebGL高级应用 JavaScript中JSON数据结构不一致时的统一循环处理策略JavaScript流式编程_Observable与RxJS进阶应用JavaScript中统一处理动态JSON数据结构以实现可靠的遍历

JavaScript
css滑动到某一位置开始执行动画 css滑动动画过渡
相关内容
发表评论

游客 回复需填写必要信息