İLK PARA BURADA EN AZ OKUYUN!
Bunun 3 yıl çok geç olduğunu biliyorum, ama Matt'in (kabul edilen) cevabı eksik ve sonunda başını belaya sokacak. Anahtar burada kullanmayı seçerseniz, yani multipart/form-data
, sınır zorunluluk değil sunucu sonunda aldığı dosya, veri görünümünde.
Bu bir problem değil application/x-www-form-urlencoded
, çünkü sınır yok. x-www-form-urlencoded
ayrıca, rastgele bir baytı üç 7BIT
bayta dönüştürmenin basit bir yolu ile her zaman ikili verileri işleyebilir . Verimsiz, ancak işe yarıyor (ve dosya adlarını ve ikili verileri gönderememe hakkındaki yorumun yanlış olduğunu unutmayın; sadece başka bir anahtar / değer çifti olarak gönderirsiniz).
Sorun multipart/form-data
, sınır ayırıcısının dosya verilerinde bulunmaması gerektiğidir (bkz. RFC 2388 ; bölüm 5.2, bu sorunu önleyen uygun bir toplu MIME türüne sahip olmamak için oldukça topal bir bahane içerir).
Yani, ilk bakışta, herhangi bir dosya yüklemesinde, ikili veya başka bir şekilde multipart/form-data
hiçbir değeri yoktur . Doğru şekilde sınır seçmezseniz, o zaman olacak sunucu yanlış yerde bir sınır bulacaksınız ve dosyanızın kesilecek, veya POST - Sonunda düz metin veya ham ikili gönderiyorsanız olsun, bir sorun var başaramayacak.
Anahtar, seçtiğiniz sınır karakterleri kodlanmış çıktıda görünmeyecek şekilde bir kodlama ve sınır seçmektir. Bir basit bir çözüm kullanımına olan base64
(do not ham ikili kullanın). Gelen base64 3 rasgele bayt çıkış karakter kümesi dört adet 7-bit karakter, kodlanmaktadır [A-Za-z0-9+/=]
(yani alfasayısal, '+', '/' veya '='). =
özel bir durumdur ve yalnızca kodlanmış çıktının sonunda tek =
veya çift olarak görünebilir ==
. Şimdi sınırınızı base64
çıktıda görünmeyen 7 bitlik ASCII dizesi olarak seçin . İnternette gördüğünüz birçok seçenek bu testte başarısız oluyor - MDN dokümanlar oluşturuyor, örneğin, ikili verileri gönderirken bir sınır olarak "blob" kullanın - iyi değil. Ancak, "! Blob!" base64
çıkışta asla görünmez .