当前位置:主页 > 查看内容

10个有用的HTML文件上传技巧

发布时间:2021-06-19 00:00| 位朋友查看

简介:上传文件的能力是许多Web和移动应用的关键需求,从将照片上传到社交媒体上到将简历发布到工作门户网站上,文件上传无处不在。 作为一名Web开发人员,我们一定知道HTML提供了原生文件上传的支持,并借助于JavaScript的一点帮助。在HTML5中,File API被添加到D……

上传文件的能力是许多Web和移动应用的关键需求,从将照片上传到社交媒体上到将简历发布到工作门户网站上,文件上传无处不在。

作为一名Web开发人员,我们一定知道HTML提供了原生文件上传的支持,并借助于JavaScript的一点帮助。在HTML5中,File API被添加到DOM中。利用它,我们可以读取 FileList 和其中的 File 对象,这就解决了文件的多种用例,即在本地加载文件或通过网络发送到服务器进行处理等。

在本文中,我们将讨论HTML文件上传支持的10种用法,希望你觉得它有用。

在任何时候,如果您想使用这些文件上传功能,都可以在这里找到:

HTML文件上传演示:https://html-file-upload.netlify.app/

该演示的源代码在我的Github存储库中,?请随时关注我,并通过示例不断更新代码,如果您觉得有用,请给一个?。

源代码仓库:https://github.com/atapas/html-file-upload

1.单个文件上传

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

  1. <input type="file" id="file-uploader"

输入文件类型使用户可以通过按钮上传一个或多个文件,默认情况下,它允许使用操作系统的本地文件浏览器上传单个文件。

上传成功后,File API 可以使用简单的JavaScript代码读取 File 对象。要读取 File 对象,我们需要监听文件上传器的 change 事件。

首先,通过ID获取文件上传器实例

  1. const fileUploader = document.getElementById('file-uploader'); 

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

  1. fileUploader.addEventListener('change', (event) => { 
  2.   const files = event.target.files; 
  3.   console.log('files', files); 
  4. }); 

在浏览器控制台中观察输出,注意 FileList 数组中的 File 对象拥有上传文件的所有元数据信息。

下面是相同示例的代码页,供您进一步研究

CodePen:https://codepen.io/atapas/pen/rNLOyRm

  1. <div> 
  2.   <h1>单个文件上传</h1> 
  3.   <input type="file" id="file-uploader"
  4.   <p>上传文件,并在浏览器控制台中查看输出。</p> 
  5.   <p id="feedback"></p> 
  6. </div> 
  1. const fileUploader = document.getElementById('file-uploader'); 
  2.  
  3. fileUploader.addEventListener('change', (event) => { 
  4.   const files = event.target.files; 
  5.   console.log('files', files); 
  6.    
  7.   const feedback = document.getElementById('feedback'); 
  8.   const msg = `File ${files[0].name} uploaded successfully!`; 
  9.   feedback.innerHTML = msg; 
  10. }); 

2.多文件上传

我们可以一次上传多个文件。为此,我们只需要在输入文件标签中添加一个名为 multiple 的属性即可。

  1. <input type="file" id="file-uploader" multiple /> 

现在,文件浏览器将允许您上传一个或多个要上传的文件。就像前面的例子一样,你可以添加一个 change 事件处理程序来捕获上传文件的信息。您是否注意到 FileList 是一个数组?对,对于多个文件上传,数组将具有以下信息:

下面是CodePen链接,用于探索多个文件上传。

CodePen:https://codepen.io/atapas/pen/MWeamYp

  1. <div> 
  2.   <h1>多文件上传</h1> 
  3.   <input type="file" id="file-uploader" multiple> 
  4.   <p>上传多个文件并在浏览器控制台中查看输出</p> 
  5.   <p id="feedback"></p> 
  6. </div> 
  1. const fileUploader = document.getElementById('file-uploader'); 
  2.  
  3. fileUploader.addEventListener('change', (event) => { 
  4.   const files = event.target.files; 
  5.   console.log('files', files); 
  6.    
  7.   // show the upload feedback 
  8.   const feedback = document.getElementById('feedback'); 
  9.   const msg = `${files.length} file(s) uploaded successfully!`; 
  10.             feedback.innerHTML = msg; 
  11. }); 

3.了解文件元数据

每当我们上传一个文件时,File 对象都有元数据信息,如文件名、大小、最后更新时间、类型等,此信息对于进一步的验证和决策很有用。

  1. // 通过id获取文件上传者 
  2. const fileUploader = document.getElementById('file-uploader'); 
  3.  
  4. // 监听 change 事件并读取元数据 
  5. fileUploader.addEventListener('change', (event) => { 
  6.   // 获取FileList数组 
  7.   const files = event.target.files; 
  8.  
  9.   // 循环浏览文件并获取元数据 
  10.   for (const file of files) { 
  11.     const name = file.name
  12.     const type = file.type ? file.type: 'NA'
  13.     const size = file.size
  14.     const lastModified = file.lastModified; 
  15.     console.log({ file, name, type, size, lastModified }); 
  16.   } 
  17. }); 

这是单个文件上传的输出:

使用此CodePen进行进一步探索

CodePen:https://codepen.io/atapas/pen/gOMaRJv

  1. <div> 
  2.   <h1>Read File Metadata</h1> 
  3.   <input type="file" id="file-uploader"
  4.   <p id="feedback"></p> 
  5. </div> 
  1. const fileUploader = document.getElementById('file-uploader'); 
  2.  
  3. fileUploader.addEventListener('change', (event) => { 
  4.   const files = event.target.files; 
  5.   console.log('files', files); 
  6.    
  7.   for (const file of files) { 
  8.     const name = file.name
  9.     const type = file.type ? file.type : 'NA'
  10.     const size = file.size
  11.     const lastModified = file.lastModified; 
  12.     console.log({file, name, type, size, lastModified}); 
  13.      
  14.     const feedback = document.getElementById('feedback'); 
  15.     const msg = ` File Name: ${name} <br/> 
  16.               File Size: ${size} <br/> 
  17.               File type: ${type} <br/> 
  18.               File Last Modified: ${new Date(lastModified)}`; 
  19.                
  20.     feedback.innerHTML = msg; 
  21.   } 
  22. }); 

4.了解文件 accept属性

我们可以使用 accept 属性来限制要上传的文件的类型,您可能希望在用户上传个人资料图片时,只显示允许浏览png格式图片类型。

  1. <input type="file" id="file-uploader" accept=".jpg, .png" multiple> 

在上面的代码中,文件浏览器将只允许扩展名为 jpg 和 png 的文件。

请注意,在这种情况下,文件浏览器会自动将文件选择类型设置为自定义而不是全部。但是,如果需要,您始终可以将其更改回所有文件。

使用此CodePen探索 accept 属性

CodePen:https://codepen.io/atapas/pen/OJXymRP

  1. <div> 
  2.   <h1>只能选择.png和.jpg文件</h1> 
  3.   <input type="file" id="file-uploader" accept=".jpg, .png" multiple> 
  4.   <p>Upload files and see the output in browser console</p> 
  5. </div> 
  1. const fileUploader = document.getElementById('file-uploader'); 
  2.  
  3. fileUploader.addEventListener('change', (event) => { 
  4.   const files = event.target.files; 
  5.   console.log('files', files); 
  6. }); 

5.管理文件内容

您可以在成功上传文件后显示文件内容。对于个人资料图片,如果上传后不立即向用户展示上传的图片,会造成混乱。

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

  1. // 获取FileReader的实例 
  2. const reader = new FileReader(); 
  3.  
  4. fileUploader.addEventListener('change', (event) => { 
  5.   const files = event.target.files; 
  6.   const file = files[0]; 
  7.  
  8.   // 上传后获取文件对象并读取 
  9.   // 数据作为URL二进制字符串 
  10.   reader.readAsDataURL(file); 
  11.  
  12.   // 加载后,对字符串进行处理 
  13.   reader.addEventListener('load', (event) => { 
  14.     // 在这里我们创建一个图像标签并添加图片 
  15.     const img = document.createElement('img'); 
  16.     imageGrid.appendChild(img); 
  17.     img.src = event.target.result; 
  18.     img.alt = file.name
  19.   }); 
  20. }); 

尝试在下面的CodePen中选择一个图像文件,然后查看其渲染。

CodePen:https://codepen.io/atapas/pen/zYBvdjZ

  1. <div> 
  2.   <h1>显示文件内容</h1> 
  3.   <input type="file" id="file-uploader" accept=".jpg, .jpeg, .png" > 
  4.   <div id="image-grid"></div> 
  5. </div> 
  1. const fileUploader = document.getElementById('file-uploader'); 
  2. const reader = new FileReader(); 
  3. const imageGrid = document.getElementById('image-grid'); 
  4.  
  5. fileUploader.addEventListener('change', (event) => { 
  6.   const files = event.target.files; 
  7.   const file = files[0]; 
  8.   reader.readAsDataURL(file); 
  9.    
  10.   reader.addEventListener('load', (event) => { 
  11.     const img = document.createElement('img'); 
  12.     imageGrid.appendChild(img); 
  13.     img.src = event.target.result; 
  14.     img.alt = file.name
  15.   }); 
  16. }); 

本文转载自网络,原文链接:https://mp.weixin.qq.com/s/7g_PsmcDn47CIh5zaXBSlQ
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!
上一篇:关于那颗6G卫星,我表示“一脸懵圈” 下一篇:没有了

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐