Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

青灯夜游
Freigeben: 2021-12-13 10:55:05
nach vorne
18405 Leute haben es durchsucht

Wie lade ich Dateien hoch? Der folgende Artikel gibt Ihnen 10 Tipps zum Hochladen von HTML-Dateien und 10 unterstützte Möglichkeiten zum Hochladen von HTML-Dateien. Ich hoffe, er wird Ihnen hilfreich sein!

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

Die Funktion zum Hochladen von Dateien ist eine häufige Anforderung in Projekten. Vom Hochladen von Fotos in sozialen Medien bis hin zur Veröffentlichung von Lebensläufen in Jobbörsen – Datei-Uploads gibt es überall. In diesem Artikel besprechen wir 10 Einsatzmöglichkeiten der Unterstützung für das Hochladen von HTML-Dateien und hoffen, dass er für Sie nützlich ist.

1. Einzeldatei-Upload

Wir können den Eingabetyp als Datei angeben, um die Datei-Upload-Funktion in Webanwendungen zu verwenden. input 类型指定为file,以在Web应用程序中使用文件上传功能。

<input type="file" id="file-uploader">
Nach dem Login kopieren

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

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

const fileUploader = document.getElementById(&#39;file-uploader&#39;);
Nach dem Login kopieren

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

fileUploader.addEventListener(&#39;change&#39;, (event) => {
  const files = event.target.files;
  console.log(&#39;files&#39;, files);
});
Nach dem Login kopieren

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

2. 多文件上传

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

<input type="file" id="file-uploader" multiple />
Nach dem Login kopieren

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

3.了解文件元数据

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

const fileUploader = document.getElementById(&#39;file-uploader&#39;);

// 听更 change 件并读取元数据
fileUploader.addEventListener('change', (event) => {
  // 获取文件列表数组
  const files = event.target.files;

  // 遍历并获取元数据
  for (const file of files) {
    const name = file.name;
    const type = file.type ? file.type: 'NA';
    const size = file.size;
    const lastModified = file.lastModified;
    console.log({ file, name, type, size, lastModified });
  }
});
Nach dem Login kopieren

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

4.了解 accept 属性

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

<input type="file" id="file-uploader" accept=".jpg, .png" multiple>
Nach dem Login kopieren

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

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

5. 管理文件内容

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

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

// FileReader 实例
const reader = new FileReader();

fileUploader.addEventListener(&#39;change&#39;, (event) => {
  const files = event.target.files;
  const file = files[0];

  reader.readAsDataURL(file);

  reader.addEventListener(&#39;load&#39;, (event) => {
    const img = document.createElement(&#39;img&#39;);
    imageGrid.appendChild(img);
    img.src = event.target.result;
    img.alt = file.name;
  });
});
Nach dem Login kopieren

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

6.验证文件大小

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

fileUploader.addEventListener(&#39;change&#39;, (event) => {
  // Read the file size
  const file = event.target.files[0];
  const size = file.size;

  let msg = &#39;&#39;;

 // 检查文件大小是否大于1MB
  if (size > 1024 * 1024) {
      msg = `<span style="color:red;">The allowed file size is 1MB. The file you are trying to upload is of ${returnFileSize(size)}</span>`;
  } else {
      msg = `<span style="color:green;"> A ${returnFileSize(size)} file has been uploaded successfully. </span>`;
  }
  feedback.innerHTML = msg;
});
Nach dem Login kopieren

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

7. 显示文件上传进度

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

const reader = new FileReader();
Nach dem Login kopieren

FileReader还有一个progress 事件,表示当前上传进度,配合HTML5的progress

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

Eingabefilter bietet Schaltflächen zum Hochladen einer oder mehrerer Dateien. Standardmäßig wird zum Hochladen einer einzelnen Datei der native Dateibrowser des Betriebssystems verwendet. Nach erfolgreichem Upload ermöglicht die File API das Lesen des File-Objekts mit einfachem JS-Code. Um das File-Objekt zu lesen, müssen wir das change-Ereignis abhören. 🎜🎜Erstens erhalten Sie die Instanz des Datei-Uploads anhand der id: 🎜
<input type="file" id="file-uploader" webkitdirectory />
Nach dem Login kopieren
Nach dem Login kopieren
🎜Dann fügen Sie einen change-Ereignis-Listener hinzu, um das Dateiobjekt zu lesen, nachdem der Upload abgeschlossen ist Über die Eigenschaft event.target.files werden die Informationen zur hochgeladenen Datei abgerufen: 🎜
<div id="container">
  <h1>Drag & Drop an Image</h1>
  <div id="drop-zone">
    DROP HERE
  </div>

  <div id="content">
    Your image to appear here..
  </div>

</div>
Nach dem Login kopieren
Nach dem Login kopieren
🎜Beobachten Sie die Ausgabeergebnisse in der Konsole. Konzentrieren Sie sich hier auf das Array FileList und Datei Objekt, das alle Metadateninformationen zur hochgeladenen Datei enthält. 🎜🎜Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads🎜
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein bisschen spielen möchten, können Sie mit CodePen spielen, Adresse: https://codepen.io/atapas/pen/rNLOyRm🎜

2. Mehrere Dateien hochladen🎜🎜Wenn wir mehrere Dateien hochladen möchten, müssen wir das Attribut multiple zum Tag hinzufügen: 🎜
 const dropZone = document.getElementById(&#39;drop-zone&#39;);
 const content = document.getElementById(&#39;content&#39;);
Nach dem Login kopieren
Nach dem Login kopieren
🎜Jetzt können wir mehrere Dateien hochladen, basierend auf Beobachten Sie im vorherigen Beispiel die Änderungen in der Konsole, nachdem Sie mehrere Dateien zum Hochladen ausgewählt haben: 🎜🎜Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads🎜
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein wenig spielen möchten, können Sie mit CodePen spielen, Adresse: https:// codepen.io/atapas/pen/MWeamYp 🎜

3. Dateimetadaten verstehen🎜🎜Immer wenn wir eine Datei hochladen, verfügt das File-Objekt über Metadateninformationen , wie etwa Dateiname, Größe, letzte Aktualisierungszeit, Typ usw. Diese Informationen sind für die weitere Überprüfung und spezielle Handhabung nützlich. 🎜
dropZone.addEventListener(&#39;dragover&#39;, event => {
  event.stopPropagation();
  event.preventDefault();
  event.dataTransfer.dropEffect = &#39;copy&#39;;
});
Nach dem Login kopieren
Nach dem Login kopieren
🎜Das Folgende ist die Ausgabe eines einzelnen Datei-Uploads: 🎜🎜Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads🎜
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein wenig spielen möchten, können Sie mit CodePen spielen, Adresse: https://codepen.io/atapas /pen/gOMaRJv🎜< /blockquote>

4. Verstehen Sie das Attribut accept🎜🎜Wir können das Attribut accept verwenden, um das zu begrenzen Art der hochzuladenden Dateien. Wenn das Dateiformat, das Sie hochladen möchten, .jpg, .png ist, können Sie Folgendes tun: 🎜
dropZone.addEventListener(&#39;drop&#39;, event => {
  // Get the files
  const files = event.dataTransfer.files;

});
Nach dem Login kopieren
Nach dem Login kopieren
🎜Im obigen Code , können Sie als Suffix nur die Dateien .jpg und .png auswählen. 🎜
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein bisschen spielen möchten, können Sie mit CodePen spielen, Adresse: https://codepen.io/atapas/pen/OJXymRP🎜

5. Dateiinhalt verwalten 🎜🎜 Anzeige des Dateiinhalts nach erfolgreichem Hochladen der Datei. Aus Sicht des Benutzers wäre es seltsam und rücksichtslos, wenn nach dem Hochladen keine Vorschau angezeigt würde. 🎜🎜Wir können das FileReader-Objekt verwenden, um Dateien in Binärzeichenfolgen zu konvertieren. Fügen Sie dann einen load-Ereignis-Listener hinzu, um die Binärzeichenfolge abzurufen, wenn die Datei erfolgreich hochgeladen wurde. 🎜
fileUploader.addEventListener(&#39;change&#39;, (event) => {
  const files = event.target.files;
  const file = files[0];
  
  const img = document.createElement(&#39;img&#39;);
  imageGrid.appendChild(img);
  img.src = URL.createObjectURL(file);
  img.alt = file.name;
});
Nach dem Login kopieren
Nach dem Login kopieren
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein bisschen spielen möchten, können Sie mit CodePen spielen, Adresse: https://codepen.io/atapas/pen/zYBvdjZ🎜
< h2 id=" item-7">6. Überprüfen Sie die Dateigröße 🎜🎜Wenn das vom Benutzer hochgeladene Bild zu groß ist, müssen wir die Größe des Bildes begrenzen, um den Server nicht zu belasten um Benutzern das Hochladen von Bildern zu ermöglichen, die kleiner als 1M sind. Wenn sie größer als 1M sind, schlägt der Upload fehl. 🎜rrreee
🎜Wenn Sie ein wenig aufgeregt sind, nachdem Sie das gesehen haben, und ein bisschen spielen möchten, können Sie mit CodePen spielen, Adresse: https://codepen.io/atapas/pen/pobjMKv🎜
< h2 id=" item-8">7. Datei-Upload-Fortschritt anzeigen 🎜🎜 Eine bessere Benutzererfahrung besteht darin, den Benutzer über den Datei-Upload-Fortschritt und die Ereignisse beim Lesen und Laden zu informieren Dateien. 🎜rrreee🎜FileReader hat auch ein progress-Ereignis, das den aktuellen Upload-Fortschritt anzeigt. Mit dem progress-Tag von HTML5 simulieren wir den Datei-Upload Fortschritt. . 🎜
reader.addEventListener(&#39;progress&#39;, (event) => {
  if (event.loaded && event.total) {
    // 计算完成百分比
    const percent = (event.loaded / event.total) * 100;
    // 将值绑定到 `progress`标签
    progress.value = percent;
  }
});
Nach dem Login kopieren
Nach dem Login kopieren

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

8. 怎么上传目录上传?

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

目前只有谷歌浏览器还有Microsoft Edge支持按照文件夹进行上传,具体可以看下百度云盘的网页版的上传按钮,在火狐下就支持按照文件进行上传,而在谷歌和Edge下,就会给用户提供一个下拉,让用户选择是根据文件进行上传还是根据文件夹进行上传。
<input type="file" id="file-uploader" webkitdirectory />
Nach dem Login kopieren
Nach dem Login kopieren

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

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

9. 拖拽上传

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

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

<div id="container">
  <h1>Drag & Drop an Image</h1>
  <div id="drop-zone">
    DROP HERE
  </div>

  <div id="content">
    Your image to appear here..
  </div>

</div>
Nach dem Login kopieren
Nach dem Login kopieren

通过它们各自的ID获取dropzonecontent 区域。

 const dropZone = document.getElementById(&#39;drop-zone&#39;);
 const content = document.getElementById(&#39;content&#39;);
Nach dem Login kopieren
Nach dem Login kopieren

添加一个dragover 事件处理程序,以显示将要复制的内容的效果:

dropZone.addEventListener(&#39;dragover&#39;, event => {
  event.stopPropagation();
  event.preventDefault();
  event.dataTransfer.dropEffect = &#39;copy&#39;;
});
Nach dem Login kopieren
Nach dem Login kopieren

Wie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads

接下来,我们需要一个drop事件监听器来处理。

dropZone.addEventListener(&#39;drop&#39;, event => {
  // Get the files
  const files = event.dataTransfer.files;

});
Nach dem Login kopieren
Nach dem Login kopieren

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

10. 使用objectURL处理文件

有一个特殊的方法叫做URL.createobjecturl(),用于从文件中创建唯一的URL。还可以使用URL.revokeObjectURL()方法来释放它。

URL.revokeObjectURL() 静态方法用来释放一个之前已经存在的、通过调用 URL.createObjectURL() 创建的 URL 对象。当你结束使用某个 URL 对象之后,应该通过调用这个方法来让浏览器知道不用在内存中继续保留对这个文件的引用了。
fileUploader.addEventListener(&#39;change&#39;, (event) => {
  const files = event.target.files;
  const file = files[0];
  
  const img = document.createElement(&#39;img&#39;);
  imageGrid.appendChild(img);
  img.src = URL.createObjectURL(file);
  img.alt = file.name;
});
Nach dem Login kopieren
Nach dem Login kopieren

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

总结

无论何时,如果你还想学习本文涉及的一些知识,你可以在这里尝试。

英文原文地址:https://dev.to/atapas/10-useful-file-upload-tips-for-web-developers-2d1d

作者: Tapas Adhikary

译者:前端小智

更多编程相关知识,请访问:编程入门!!

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien hoch? 10 Tipps zum Teilen von HTML-Datei-Uploads. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!