2010-05-29 12 views
10

, - karakteri '\' kaçabilir quites arasındaki dize başka bir ascii karakteri.Ayrıştırma içerik eğilim başlığının dosya parçalı/dan-data dosya alan parametre HTTP alıntı dize olarak aldığı çok parçalı/form-data içerik eğilim başlığındaki RFC göre

Sorun şu ki, web tarayıcıları bunu yapmıyor.

IE6 gönderir:

Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt" 

yerine kurallarına yerine z:\tmp\test.txt göre z:tmptest.txt olarak çözümlenen gerektiğini

Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt" 

bekliyordu. Bu konuyla ilgilenmesi için öneririm nasıl ...

Content-Disposition: form-data; name="file"; filename="\"test\".txt" 

beklenen Yani bir yerine

Content-Disposition: form-data; name="file"; filename=""test".txt" 

:

Firefox Konqueror ve Chrome "örneğin karakterlerden kurtulmak değil mi?

Herkes bir fikir var mı?

cevap

2

Bu dosya adını hiç ayrıştırmanız için bir neden var mı? tutarlı

en az bir şey başlığının filename kısmı çift tırnak ile sona olmasıdır, böylece sadece filename=" ve son" arasındaki her şeyi okumak gerekir. Eğer kullanıcılar bunları sekmeler ile dosya yükleme olacağını özellikle büyük ihtimal sürece

O zaman muhtemelen, bir hazır ters eğik çizgi olarak \\, \" veya \" dışında herhangi ters eğik çizgi tedavi edebilir.

+2

"Bu dosya adını ayrıştırmanızın bir nedeni var mı?" - evet dosya adını bilmek istiyorum;). "En azından tutarlı olan tek şey, başlığın dosya adı kısmının çift tırnak işareti ile bitmesidir." Dosya adı ve ad alanları bu sırayla gelmemelidir, bu nedenle dosya adının son ile bittiğini düşünmek kötü bir fikirdir. tırnak işareti. – Artyom

+0

Want! = Ihtiyaç. ;) Tamam, en azından '' 'veya' 'ile biteceğini garanti edersiniz; - Bu tutarlılık eksikliği ile, kullanıcıların ismini vermeyeceği gerçeğine güvenmek gibi bazı tavizler vermek zorundasınız: '' dosya adlarının ortasında :) Alternatif olarak, destekleyen bir web çerçevesi kullanıyor musunuz? Bu öznitelik sizin için en iyi ayrıştırma sizin için? –

1

Eski bir iş parçacığı olmasına rağmen, ilgilenen herkes için aşağıdaki java çözümünü ekleyerek.

// import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.*; 

    try { 
     ContentDisposition contentDisposition = new ContentDisposition("attachment; filename=\"myfile.log\"; filename*=UTF-8''myfile.log"); 
     System.out.println(contentDisposition.getParameter("filename")); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
+0

Soru, Java'ya özel olmadığı için, sorunun nasıl çözüldüğüne dair bir açıklama yararlı olacaktır .. –

+0

Anlaşıldı. Aynı problemi ararken, ben de regex pattern (http://stackoverflow.com/a/27226712/3940047) .Bu çözümü, aynı içeriğe sahip birisine yardımcı olabileceğinden ekledi. İnsanlar, uygun anahtar kelimelerle Google'a giderler ve buraya inebilirler. faydalı bul. –

İlgili konular