วิธีสร้างไฟล์ขนาดแม่นยำ
ทุกระบบมีคำสั่งสำหรับเรื่องนี้ และทั้งสามอยู่ด้านล่าง คำสั่งเหล่านี้ให้ไฟล์ที่มีจำนวนไบต์ถูกต้องพอดี - และสำหรับการทดสอบจำนวนมากนั่นคือทั้งหมดที่ต้องการ ทุกคำสั่งในหน้านี้ถูกรันก่อนเผยแพร่ บนระบบที่มันเป็นของ
คำตอบสั้นๆ
Windows: fsutil file createnew name 10485760 Linux: dd if=/dev/zero of=name bs=1M
count=10 macOS: mkfile 10m name ขนาดเป็นไบต์ และ 10 MB
ตามวิธีนับของตัวจัดการไฟล์คือ 10485760
Windows
fsutil และเวอร์ชัน PowerShell ที่ไม่ต้องใช้อะไรเพิ่ม
fsutil มาพร้อม Windows รับขนาดเป็นไบต์ จึงคำนวณตัวเลขก่อน - 10 MB คือ
10485760, 100 MB คือ 104857600, 1 GB คือ 1073741824
fsutil file createnew test10mb.bin 10485760
วัดบน Windows 11: ทำงานจากพรอมต์ธรรมดาโดยไม่ต้องใช้พรอมต์ที่ยกระดับสิทธิ์ และไฟล์ออกมาที่ 10485760 ไบต์พอดี
PowerShell ทำสิ่งเดียวกันได้โดยไม่ต้องเรียกโปรแกรมอื่น และเข้าใจหน่วย:
$file = New-Object System.IO.FileStream "test10mb.bin", Create, ReadWrite
$file.SetLength(10MB)
$file.Close()
10MB ใน PowerShell หมายถึง 10485760 ไบต์ ซึ่งเป็นการนับฐาน 1024 เดียวกับที่ Explorer
ใช้ ดังนั้นสองคำสั่งข้างต้นให้ขนาดเดียวกัน
Linux
dd, truncate และ fallocate และความต่างที่ทำให้คนพลาด
dd คือคำสั่งที่ทุกคนรู้จัก มันเขียนไบต์จริงๆ:
dd if=/dev/zero of=test10mb.bin bs=1M count=10
truncate เสร็จทันที และนั่นคือกับดัก วัดบน Alpine Linux ไฟล์รายงาน 10485760
ไบต์และกินที่ ศูนย์บล็อก - เป็นไฟล์แบบกระจาย
สิ่งที่อ่านไฟล์ได้ศูนย์สิบเมกะไบต์ แต่ดิสก์ไม่เคยสละพื้นที่:
truncate -s 10M test10mb.bin
ใช้ทดสอบขีดจำกัดการอัปโหลดได้ แต่ทำให้เข้าใจผิดเมื่อทดสอบโควตาดิสก์ fallocate
คือสิ่งที่ควรใช้เมื่อพื้นที่ต้องเป็นของจริง:
fallocate -l 10M test10mb.bin
และเมื่อเนื้อหาต้องบีบอัดไม่ได้ เพื่อไม่ให้ตัวเก็บถาวรบีบกลับลงไปอีก:
head -c 10485760 /dev/urandom > test10mb.bin
macOS
mkfile ซึ่งไม่ใช่ไฟล์แบบกระจาย และอีกสองคำสั่งที่คุณรู้จักอยู่แล้ว
macOS มี mkfile มาให้ วัดบน macOS 26.6.2: 10485760 ไบต์ และ 20480 บล็อก
ดังนั้นพื้นที่ถูกจัดสรรจริง ไม่ใช่แค่สัญญา:
mkfile 10m test10mb.bin
dd และ truncate ก็มีเช่นกันและทำงานเหมือนบน Linux:
dd if=/dev/zero of=test10mb.bin bs=1m count=10
truncate -s 10M test10mb.bin
ตรงที่วิธีนี้เลิกได้ผล
ไฟล์ขนาดถูกต้องไม่ใช่ไฟล์ชนิดที่ถูกต้อง
ทุกวิธีข้างต้นให้บล็อกของศูนย์ นั่นเพียงพอเมื่อสิ่งที่ทดสอบดูแค่ขนาด เช่น ขีดจำกัดอัปโหลด โควตา หรือการถ่ายโอน และเลิกเพียงพอทันทีที่มีอะไรเปิดไฟล์
วัดแล้ว และควรลองด้วยตัวเอง: สร้างไฟล์ 2 MB ด้วย fsutil ตั้งชื่อว่า
photo.png แล้วส่งให้ไลบรารีรูปภาพ Pillow ตอบว่า cannot identify image
file มันไม่ใช่ PNG และไม่เคยเป็น - มีแต่ชื่อที่บอกเช่นนั้น
เรื่องนี้สำคัญกว่าที่ฟังดู เพราะการทดสอบล้มเหลวไปทางไหนต่อจากนั้น เอนด์พอยต์อัปโหลดของคุณปฏิเสธไฟล์ การทดสอบเป็นสีเขียว และคุณสรุปว่าขีดจำกัดขนาดใช้ได้ แต่มันไม่ได้ปฏิเสธเพราะขนาด มันปฏิเสธเพราะไบต์ไม่ใช่รูปภาพ และกฎที่คุณตั้งใจทดสอบไม่เคยถูกแตะต้องเลย
- ตัวแยกวิเคราะห์ปฏิเสธก่อนจะดูกฎขนาดใดๆ
- ขั้นตอนภาพขนาดย่อล้มเหลว และข้อผิดพลาดที่คุณอ่านเป็นเรื่องของภาพขนาดย่อ
- โปรแกรมป้องกันไวรัสหรือการตรวจเนื้อหาปฏิเสธด้วยเหตุผลที่สาม
- โปรแกรมดูไม่แสดงอะไร และไม่มีใครบอกได้ว่านั่นคือบั๊กหรือไม่
อีกทางหนึ่ง
ไฟล์จริงของรูปแบบนั้น ขนาดตรงตามที่คุณขอพอดี
นี่คือสิ่งที่ Testing Files Generator ทำ ไฟล์เป็นของแท้ของรูปแบบนั้น - เปิดได้ในซอฟต์แวร์ของมัน - และมีจำนวนไบต์ตรงตามที่คุณขอ ถึงระดับไบต์:
tfg generate --format png --size 10mb --out ./fixtures
ขอขนาดที่รูปแบบไปไม่ถึง แล้วคุณจะได้ข้อผิดพลาดที่ระบุขีดล่างและเหตุผล ไม่ใช่ไฟล์ขนาดผิด หน้ารูปแบบไฟล์แสดงทุกรูปแบบพร้อมไฟล์เล็กที่สุดที่ทำได้
และขีดจำกัดหนึ่งค่าคือกรณีทดสอบสามกรณี ไม่ใช่หนึ่ง เครื่องมือจึงสร้างทั้งสาม:
tfg generate --format pdf --boundary 10mb --out ./edges
ได้ไฟล์ 10485759, 10485760 และ 10485761 ไบต์ พร้อมแมนิเฟสต์ที่บอกว่าระบบของคุณควรยอมรับไฟล์ไหนและปฏิเสธไฟล์ไหน หน้ากรณีการใช้งานอธิบายเรื่องนี้และงานอื่นอีกสี่อย่างที่เครื่องมือนี้สร้างมาเพื่อ
ฟรีและโอเพนซอร์ส GPL-3.0 ไม่ต้องสมัครสมาชิก ไฟล์ดาวน์โหลดของ Windows และ macOS ลงนามแล้วและเริ่มทำงานโดยไม่มีคำเตือน
แล้วควรใช้อะไร
-
ใช้คำสั่งของระบบ
เมื่อไม่มีอะไรเปิดไฟล์ ทดสอบขีดจำกัดขนาดบนเอนด์พอยต์ที่ตรวจขนาดก่อน การถ่ายโอน โควตา หรือดิสก์เต็ม เป็นบรรทัดเดียวและติดตั้งไว้แล้ว
-
ใช้ตัวสร้างจริง
เมื่อมีอะไรแยกวิเคราะห์ เรนเดอร์ นำเข้า หรือแตกไฟล์ - และเมื่อคุณต้องการฟิกซ์เจอร์ชุดเดิมอีกครั้งพรุ่งนี้บนเครื่องอื่น ไบต์ต่อไบต์
ทั้งสองอยู่ในหน้านี้เพราะทั้งสองถูกต้องในบางครั้ง ข้อผิดพลาดที่ควรเลี่ยงคือการใช้อันแรกในที่ที่ต้องใช้อันที่สอง แล้วอ่านการทดสอบสีเขียวเป็นหลักฐาน