html链接代码怎么写,html引用本地图片路径

2023年2月11日17:24:18html链接代码怎么写,html引用本地图片路径已关闭评论

本文已经过原作者 Tapas Adhikary 授权翻译

简介

上传文件功能可以说是项目经常出现的需求。从在社交媒体上上传照片到在求职网站上发布简历,文件上传无处不在。在本文中,我们将讨论 HTML文件上传支持的10种用法,希望对你有用。

1. 单文件上传

我们可以将input 类型指定为file,以在Web应用程序中使用文件上传功能。

<inputtype="file"id="file-uploader">

input filte 提供按钮上传一个或多个文件。默认情况下,它使用操作系统的本机文件浏览器上传单个文件。成功上传后,File API 使得可以使用简单的 JS 代码读取File对象。要读取File对象,我们需要监听 change事件。

首先,通过id获取文件上传的实例:

constfileUploader =document.getElementById(file-uploader);

然后添加一个change 事件侦听器,以在上传完成后读取文件对象, 我们从event.target.files属性获取上传的文件信息:

fileUploader.addEventListener(change,(event)=>{
  const files = event.target.files;console.log(files, files);
});

在控制台中观察输出结果,这里关注一下FileList数组和File对象,该对象具有有关上传文件的所有元数据信息。

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/rNLOyRm

2. 多文件上传

如果我们想上传多个文件,需要在标签上添加multiple 属性:

<inputtype="file"id="file-uploader"multiple />

现在,我们可以上传多个文件了,以前面事例为基础,选择多个文件上传后,观察一下控制台的变化:

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/MWeamYp

3.了解文件元数据

每当我们上传文件时,File对象都有元数据信息,例如file name,size,last update time,type 等等。这些信息对于进一步的验证和特殊处理很有用。

constfileUploader =document.getElementById(file-uploader);// 听更 change 件并读取元数据fileUploader.addEventListener(change,(event) =>{// 获取文件列表数组constfiles = event.target.files;// 遍历并获取元数据for(constfile of files) {constname = file.name;consttype= file.type ? file.type:NA;constsize = file.size;constlastModified = file.lastModified;console.log({ file, name,type, size, lastModified });
  }
});

下面是单个文件上传的输出结果:

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/gOMaRJv

4.了解 accept 属性

我们可以使用accept属性来限制要上载的文件的类型,如果只想上传的文件格式是 .jpg,.png 时,可以这么做:

<inputtype="file"id="file-uploader"accept=".jpg, .png"multiple>

在上面的代码中,只能选择后缀是.jpg和.png的文件。

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/OJXymRP

5. 管理文件内容

成功上传文件后显示文件内容,站在用户的角度上,如果上传之后,没有一个预览的,就很奇怪也不体贴。

我们可以使用FileReader对象将文件转换为二进制字符串。然后添加load 事件侦听器,以在成功上传文件时获取二进制字符串。

// FileReader 实例constreader =newFileReader();

fileUploader.addEventListener(change,(event) =>{constfiles = event.target.files;constfile = files[0];

  reader.readAsDataURL(file);

  reader.addEventListener(load,(event) =>{constimg =document.createElement(img);
    imageGrid.appendChild(img);
    img.src = event.target.result;
    img.alt = file.name;
  });
});

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/zYBvdjZ

6.验证文件大小

如果用户上传图片过大,为了不让服务器有压力,我们需要限制图片的大小,下面是允许用户上传小于1M 的图片,如果大于 1M 将上传失败。

fileUploader.addEventListener(change, (event) => {// Read the file sizeconstfile =event.target.files[0];constsize = file.size;letmsg =;// 检查文件大小是否大于1MBif(size >1024*1024) {
      msg = `如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/pobjMKv

7. 显示文件上传进度

更好的用户体验是让用户知道文件上传进度,前面我们用过了FileReader以及读取和加载文件的事件。

constreader =newFileReader();

FileReader还有一个progress 事件,表示当前上传进度,配合HTML5的progress标签,我们来模拟一下文件的上传进度。

reader.addEventListener(progress, (event) => {if(event.loaded &&event.total) {// 计算完成百分比constpercent = (event.loaded /event.total) *100;// 将值绑定到 `progress`标签progress.value= percent;
  }
});

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/eYzpwYj

8. 怎么上传目录上传?

我们可以上传整个目录吗?嗯,这是可能的,但有一些限制。有一个叫做webkitdirectory的非标准属性(目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传),它允许我们上传整个目录。

目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传,具体可以看下百度云盘的网页版的上传按钮,在火狐下就支持按照文件进行上传,而在谷歌和Edge下,就会给用户提供一个下拉,让用户选择是根据文件进行上传还是根据文件夹进行上传。

<inputtype="file"id="file-uploader"webkitdirectory />

用户必须需要确认才能上传目录

用户单击上传按钮后,就会进行上传。这里要注意的重要一点。FileList数组将以平面结构的形式包含有关上载目录中所有文件的信息。对于每个File对象,webkitRelativePath属性表示目录路径。

例如,上传一个主目录及其下的其他文件夹和文件:

现在,File 对象将将webkitRelativePath填充为:

如果大家看到这里,有点激动,想手贱一下,可以 CodePen 玩玩,地址:https://codepen.io/atapas/pen/dyXYRKp

9. 拖拽上传

不支持文件上传的拖拽就有点 low 了,不是吗?我们来看看如何通过几个简单的步骤实现这一点。

首先,创建一个拖放区域和一个可选的区域来显示上传的文件内容。

<divid="container"><h1>Drag & Drop an Image

懵懂先生