一、input上傳文件詳解

1. input上傳文件保存

input標籤有個type為file,用於選擇上傳文件。在提交表單時需要注意enctype屬性設置為multipart/form-data。接收文件的後端可以通過request.FILES.get(‘file’)來拿到上傳的文件對象。

<form method="post" enctype="multipart/form-data" action="{% url 'upload' %}">
  {% csrf_token %}
  <input type="file" name="file">
  <button type="submit">上傳</button>
</form>

2. input上傳文件第二次獲取不到

由於input的type為file,每次選擇完文件後會在網頁上留下緩存,因此如果用戶再次選擇同一個文件上傳,後端是獲取不到文件對象的。因此,需要在input標籤中添加一個自定義的屬性,讓每次選擇文件時都能創建新的input標籤。

<input id="file" type="file" name="file">
<button type="button" onclick="document.getElementById('file').click()">選擇文件</button>

<script>
  document.getElementById('file').onchange = function() {
    var file = this.files[0];
    var input = document.createElement('input');
    input.type = 'file';
    input.name = 'file';
    input.style.display = 'none';
    this.parentNode.appendChild(input);
    input.click();
    this.parentNode.removeChild(this);
  };
</script>

3. input上傳文件夾

目前還沒有原生的input組件支持上傳文件夾,但是可以藉助一些插件實現上傳文件夾的功能,比如WebUploader,Fine uploader等。

4. input上傳文件完成

上傳文件完成後,可以在前端根據後端返回的數據進行提示。比如可以在頁面上顯示上傳成功或上傳失敗的狀態。

$.ajax({
  url: '/upload/',
  type: 'POST',
  data: formdata,
  processData: false,
  contentType: false,
  success: function(data) {
    alert('上傳成功');
  },
  error: function(data) {
    alert('上傳失敗');
  }
});

5. input上傳文件修改按鈕名字

可以修改input上傳文件按鈕的名字,修改後的名字會顯示在選擇文件的按鈕上。

<input type="file" name="file" accept="image/*" onchange="document.getElementById('file').value=this.value">

二、input多文件上傳

1. input多文件上傳

在input標籤上添加multiple屬性,即可實現多文件上傳功能。

<input type="file" name="file" multiple>

2. input上傳文件重複上傳失敗

由於每個上傳的文件都有唯一的文件名,因此如果上傳的文件名相同則會上傳失敗。可以在前端對文件名進行處理,使其在後端不會重複。

<input type="file" name="file" onchange="formatFileName(this)">

<script>
  function formatFileName(input) {
    var files = input.files;
    for (var i = 0; i < files.length; i++) {
      var suffix = files[i].name.substring(files[i].name.lastIndexOf('.'));
      var newname = Date.now() + suffix;
      files[i].name = newname;
    }
  }
</script>

3. input上傳文件時無法選擇文件

出現這種情況一般是因為瀏覽器禁止訪問本地文件,可以嘗試更換瀏覽器或者檢查瀏覽器設置。

三、input上傳文件獲取文件上傳路徑

1. input上傳文件獲取文件上傳路徑

input上傳文件的path屬性是只讀的,無法通過JavaScript獲取。

<input type="file" name="file" id="file">

<script>
  var path = document.getElementById('file').value; // 獲取不到上傳文件的路徑
</script>

2. input上傳文件怎麼知道上傳完成

上傳文件完成後,後端會返回上傳文件的信息,前端可以根據這些信息判斷上傳是否成功。

$.ajax({
  url: '/upload/',
  type: 'POST',
  data: formdata,
  processData: false,
  contentType: false,
  success: function(data) {
    if (data.code === 0) {
      alert('上傳成功');
    } else {
      alert('上傳失敗');
    }
  },
  error: function(data) {
    alert('上傳失敗');
  }
});

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/188513.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-28 13:31
下一篇 2024-11-28 13:31

相關推薦

  • Python input參數變量用法介紹

    本文將從多個方面對Python input括號里參數變量進行闡述與詳解,並提供相應的代碼示例。 一、基本介紹 Python input()函數用於獲取用戶輸入。當程序運行到inpu…

    編程 2025-04-29
  • input代碼中代表什麼

    在web開發中,input是最基礎的輸入控件之一,常用來收集用戶的數據並提交至服務器進行處理。本文將從多個方面詳細闡述input代碼中代表什麼。 一、type屬性 在HTML中,i…

    編程 2025-04-27
  • Python input列表

    本文將從多個角度詳細介紹Python怎麼input列表。 一、基礎概念 Python中的列表是一種有序的數據序列,可以包含任意類型的數據。當我們需要從用戶獲取一組數據時,可以使用i…

    編程 2025-04-27
  • Python用input賦值用法介紹

    本文將從多個方面詳細闡述Python中如何使用input函數來賦值,以幫助讀者更好的理解和應用該函數。 一、基礎使用 1、input函數的作用是從鍵盤輸入一行文本,並返回一個字符串…

    編程 2025-04-27
  • 神經網絡代碼詳解

    神經網絡作為一種人工智能技術,被廣泛應用於語音識別、圖像識別、自然語言處理等領域。而神經網絡的模型編寫,離不開代碼。本文將從多個方面詳細闡述神經網絡模型編寫的代碼技術。 一、神經網…

    編程 2025-04-25
  • Linux sync詳解

    一、sync概述 sync是Linux中一個非常重要的命令,它可以將文件系統緩存中的內容,強制寫入磁盤中。在執行sync之前,所有的文件系統更新將不會立即寫入磁盤,而是先緩存在內存…

    編程 2025-04-25
  • Python輸入輸出詳解

    一、文件讀寫 Python中文件的讀寫操作是必不可少的基本技能之一。讀寫文件分別使用open()函數中的’r’和’w’參數,讀取文件…

    編程 2025-04-25
  • git config user.name的詳解

    一、為什麼要使用git config user.name? git是一個非常流行的分佈式版本控制系統,很多程序員都會用到它。在使用git commit提交代碼時,需要記錄commi…

    編程 2025-04-25
  • nginx與apache應用開發詳解

    一、概述 nginx和apache都是常見的web服務器。nginx是一個高性能的反向代理web服務器,將負載均衡和緩存集成在了一起,可以動靜分離。apache是一個可擴展的web…

    編程 2025-04-25
  • Linux修改文件名命令詳解

    在Linux系統中,修改文件名是一個很常見的操作。Linux提供了多種方式來修改文件名,這篇文章將介紹Linux修改文件名的詳細操作。 一、mv命令 mv命令是Linux下的常用命…

    編程 2025-04-25

發表回復

登錄後才能評論