Wie man das Datei-Upload-Limit korrekt testet
Bei der Entwicklung einer Datei-Upload-Funktion in einer Webanwendung denken Sie vielleicht beruhigt 「Ich habe das Limit auf 10MB festgelegt」. Tatsächlich gibt es jedoch viele Fallstricke beim Testen von Upload-Limits, und ohne ordnungsgemäße Validierung können in der Produktionsumgebung unerwartete Fehler auftreten. Dieser Artikel erklärt, wie Sie Upload-Limits mithilfe des Boundary Value Testing präzise testen.
Was ist Grenzwerttest
Grenzwerttest (Boundary Value Testing) ist eine der grundlegenden Techniken beim Softwaretesten. Sie basiert auf der empirischen Regel, dass Bugs tendenziell in der Nähe der Grenzen von Eingabewerten auftreten, also an Punkten wie 「genau am Limit」, 「ein Byte vor dem Limit」 und 「ein Byte über dem Limit」.
Bei Limit-Tests für Datei-Uploads sollten Sie mindestens die folgenden 3 Testfälle vorbereiten.
- <strong>Datei am genauen Limit</strong> — überprüfen Sie, ob der Upload erfolgreich ist
- <strong>Datei 1 Byte unter dem Limit</strong> — Überprüfen, ob dies garantiert erfolgreich ist
- <strong>Datei 1 Byte über dem Limit</strong> — überprüfen Sie, ob sie korrekt abgelehnt wird
Vorsicht vor der Verwechslung von MB und MiB
Der häufigste Fehler beim Testen von Upload-Limits ist die Verwechslung von MB (Megabyte) und MiB (Mebibyte).
- <strong>1 MB</strong> = 1.000.000 Bytes (dezimale Basis, SI-Einheiten)
- <strong>1 MiB</strong> = 1.048.576 Bytes (binäre Basis, IEC-Einheiten)
Dieser Unterschied beträgt etwa 4,86%, wobei zwischen 10 MB und 10 MiB ein Unterschied von 48.576 Bytes besteht. Es ist wichtig, genau zu verstehen, welche Einheit vom Server-Framework oder Cloud-Service verwendet wird. Wenn Sie beispielsweise 「10M」 in PHPs <code>upload_max_filesize</code> angeben, wird dies als 10 MiB (10.485.760 Bytes) interpretiert. Andererseits können einige CDNs und API-Gateways es als 10 MB (10.000.000 Bytes) behandeln.
Overhead von multipart/form-data
Das Format <code>multipart/form-data</code>, das beim Datei-Upload verwendet wird, enthält neben dem Dateikörper auch Overhead wie Boundary-Strings, Content-Disposition-Header und Zeilenumbruchcodes.
Falls die Limits-Überprüfung auf der Serverseite für den gesamten Request-Body erfolgt, kann die Grenze überschritten werden, wenn der Overhead berücksichtigt wird, selbst wenn der Datei-Body innerhalb des Limits liegt. Der <code>client_max_body_size</code> von Nginx begrenzt die Größe des gesamten Request-Body, daher ist Vorsicht erforderlich.
# Nginx の設定例
client_max_body_size 10m; # リクエストボディ全体の上限(MiB単位)
Doppelte Validierung zwischen Front-End und Back-End
Überprüfen Sie während des Tests, ob die Größenprüfung sowohl im Frontend (JavaScript) als auch im Backend (Server) durchgeführt wird. Wenn die Prüfung nur im Frontend erfolgt, kann sie leicht mit Entwicklertools oder dem <code>curl</code>-Befehl umgangen werden.
// フロントエンドでのサイズチェック例
const MAX_SIZE = 10 * 1024 * 1024; // 10 MiB
fileInput.addEventListener('change', (e) => {
const file = e.target.files[0];
if (file.size > MAX_SIZE) {
alert('ファイルサイズが上限を超えています');
e.target.value = '';
}
});
Überprüfung von Fehlermeldungen und UX
Beim Grenzwerttest sollten Sie nicht nur überprüfen, ob eine Anfrage erfolgreich ist oder fehlschlägt, sondern auch die folgenden Punkte prüfen.
- Wird eine klare Fehlermeldung angezeigt, wenn das Limit überschritten wird
- Ist der HTTP-Statuscode angemessen? (413 Payload Too Large usw.)
- Funktioniert die Fortschrittsanzeige korrekt beim Upload großer Dateien
- Ob die Timeout-Verarbeitung ordnungsgemäß durchgeführt wird
Wie man Testdateien erhält
Für genaue Grenzwertests sind Testdateien mit exakter Größe in Bytes erforderlich. DevLab stellt Grenzwert-Testdateien bereit, die an die wichtigsten Upload-Limits ausgerichtet sind.
- <a href="/ja/files/threshold/">Liste von Grenzwert-Testdateien</a> — Dateien angepasst an die Limits großer Dienste wie Gmail (25MB), Discord (25MB), WordPress (10MB)
- <a href="/ja/files/threshold/10mb/">10 MB Grenzwert-Testsatz</a> — 3 Dateien: genau am Limit, davor und danach
- <a href="/ja/files/threshold/25mb/">25 MB Grenzwert-Testsatz</a> — Für E-Mail-Anhänge und Chat-Tools
Alle Dateien enthalten MD5-, SHA-1- und SHA-256-Hash-Werte. Nutzen Sie diese auch zur Integritätsprüfung nach dem Download.
Zusammenfassung
Das Testen des Datei-Upload-Limits ist nicht ausreichend, wenn Sie nur 「eine große Datei hochladen」. Verstehen Sie den Unterschied zwischen MB und MiB, berücksichtigen Sie den Multipart-Overhead und validieren Sie Grenzwerte mit präzisen Test-Dateien auf Byte-Ebene. Mit den Grenzwert-Test-Dateien von DevLab können Sie diese Tests effizient durchführen.
Testdatei zur Verwendung in diesem Artikel
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">Liste von Schwellwert-Testdateien (9.9MB / 10MB / 10.1MB)</a>
- → <a href="/ja/files/images/png/" class="text-primary-600 dark:text-primary-400 hover:underline">PNG-Bild-Testdateiliste</a>
Verwandte Artikel
- → <a href="/ja/blog/mb-vs-mib-file-size/" class="text-primary-600 dark:text-primary-400 hover:underline">MB und MiB sind unterschiedlich! Die Fallstricke von Dateigröße-Einheiten</a>
- → <a href="/ja/blog/multipart-form-data-overhead/" class="text-primary-600 dark:text-primary-400 hover:underline">Den Overhead von multipart/form-data genau berechnen</a>
- → <a href="/ja/blog/file-validation-checklist/" class="text-primary-600 dark:text-primary-400 hover:underline">Checkliste zur Implementierung der Dateiverifizierung für Web-Formulare</a>