ไคลเอนต์ตรวจสอบขนาดไฟล์โดยใช้ HTML5?


85

ฉันกำลังพยายามขี่คลื่น HTML5 แต่กำลังประสบปัญหาเล็กน้อย ก่อน HTML5 เรากำลังตรวจสอบขนาดไฟล์ด้วยแฟลช แต่ตอนนี้แนวโน้มคือการหลีกเลี่ยงการใช้แฟลชในเว็บแอป มีวิธีใดในการตรวจสอบขนาดไฟล์ในฝั่งไคลเอ็นต์โดยใช้ HTML5 หรือไม่?

คำตอบ:


128

นี้ได้ผล วางไว้ในตัวฟังเหตุการณ์เมื่ออินพุตเปลี่ยนไป

if (typeof FileReader !== "undefined") {
    var size = document.getElementById('myfile').files[0].size;
    // check file size
}

มันใช้ได้กับฉันใน IE 10, Mozilla FFx และ Chrome ขอบคุณ!
Rahnzo

ใช้งานได้ดีคุณใช้ไม่ถูกต้อง เข้าสู่ระบบเหตุการณ์ onchange ของอินพุตและคุณจะสบายดี
dandavis

@dandavis ฉันใช้รหัสในคำตอบ หากรหัสใช้งานได้ดีเหตุใดฉันจึงต้องเปลี่ยนรหัส
Chuck Le Butt

1
@Chuck ตัวอย่างของคุณใช้ไม่ได้เนื่องจากคุณพยายามอ่านรายการไฟล์ในการโหลดหน้าก่อนที่จะเลือกไฟล์ใด ๆ
ประมาณ

1
@Chuck: โอเคมันใช้งานได้ดีและคุณก็วางมันได้ แต่เพียงอย่างเดียวไม่เพียงพอ หากคุณเรียกใช้ในคอนโซลหลังจากเติมไฟล์คุณจะเห็นว่ามันทำงานได้ดี สำหรับแอปคอนโซลนั้นไม่ดีดังนั้นคุณควรใส่รหัสในเหตุการณ์ที่ทำงานหลังจากเติมข้อมูลเข้าจึงจะทำงานได้ตามที่คาดไว้ ขอโทษที่เข้าใจผิด.
dandavis

33

คำตอบที่ยอมรับนั้นถูกต้องจริง แต่คุณต้องเชื่อมโยงกับตัวฟังเหตุการณ์เพื่อให้อัปเดตเมื่อมีการเปลี่ยนแปลงอินพุตไฟล์

document.getElementById('fileInput').onchange = function(){
    var filesize = document.getElementById('fileInput').files[0].size;
    console.log(filesize);    
}

หากคุณใช้ไลบรารี jQuery รหัสต่อไปนี้อาจมีประโยชน์

$('#fileInput').on('change',function(){
  if($(this).get(0).files.length > 0){ // only if a file is selected
    var fileSize = $(this).get(0).files[0].size;
    console.log(fileSize);
  }
});

ระบุว่าการแปลง fileSize เพื่อแสดงเมตริกที่เคยขึ้นอยู่กับคุณ


ตัวอย่าง jQuery ของคุณไม่ทำงาน ดูเหมือนว่าคุณจะไม่สามารถใช้ jQuery กับ.files: jsfiddle.net/edxvo4wa ได้ (ฉันค้นพบสิ่งนี้ด้วยตัวเองเมื่อฉันคิดหาวิธีแก้ปัญหา - มันใช้งานได้ถ้าคุณเปลี่ยนเป็นdocument.getElementById)
Chuck Le Butt

1
@Chuck ขอโทษสำหรับข้อผิดพลาดที่นั่นฉันมีการปรับปรุงคำตอบของฉันกับคนทำงาน
Ammadu

7

HTML5 fie api รองรับการตรวจสอบขนาดไฟล์

อ่านบทความนี้เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับ file api

http://www.html5rocks.com/en/tutorials/file/dndfiles/

<input type="file" id="fileInput" />


var size = document.getElementById("fileInput").files[0].size;

ในทำนองเดียวกัน file API ให้ชื่อและประเภท


3

โดยส่วนตัวแล้วฉันจะเลือกใช้รูปแบบนี้:

    $('#inputFile').bind('change', function(e) {
      var data = e.originalEvent.target.files[0];
      // and then ...
      console.log(data.size + "is my file's size");
      // or something more useful ...
      if(data.size < 500000) {
        // what your < 500kb file will do
      }
    }

1
ฉันเชื่อว่า 500kb จะเป็น 500 * 1024 จริง ๆ ไม่ใช่เรื่องใหญ่ แต่ผู้ใช้ปลายทางที่มีไฟล์ 500,000b จะเห็นว่าเป็น 488kb และปฏิเสธ และนี่เป็นการเริ่มต้นความยุ่งยากครั้งใหญ่
Apolo

2

"ไม่มีวิธีแก้ปัญหาข้ามเบราว์เซอร์ที่เรียบง่ายเพื่อให้บรรลุเป้าหมายนี้": กำลังตรวจหาขนาดไฟล์ที่อัปโหลดในฝั่งไคลเอ็นต์?


10
เพิ่มการตรวจสอบขนาดเซิร์ฟเวอร์ด้วยเช่นกัน แต่คุณอาจช่วยผู้ที่มีเบราว์เซอร์ที่ทันสมัยไม่ต้องเจ็บปวดและตรวจสอบฝั่งไคลเอ็นต์
El Yobo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.