Dosyaları HTTP üzerinden çoklu / form verileri olarak yüklemek için Linux komut satırı aracı?


25

Bu --post-fileseçeneğin bir seçeneği olduğunu görebiliyorum , ama manpage diyor

Wget şu anda POST verilerini iletmek için çok parçalı / form verilerini desteklememektedir; sadece uygulama / x-www-form-urlencoded. Sadece biri --post-datave --post-filebelirtilmelidir.

Çok parçalı / form verilerinde dosya yüklemek için benzer bir yol var mı?

Yanıtlar:


31

Kıvırmak kullanın:

curl -F "file=@localfile;filename=nameinpost" url.com

17

Bunu sadece wget ile yapmak mümkündür. En azından sürüm 1.13.4 ve belki de diğerleri. --Post-file seçeneği, veri dosyası düzgün bir şekilde oluşturulduğu sürece gönderilecek bir dosya belirlemenizi sağlar.

Ayrıca bu ikili dosyaları ile test ettik ve beklendiği gibi çalışıyor. Base64'ü dosyayı kodlamanıza gerek yok, ancak dosyanızın sınır içermediğinden emin olmanız gerekir.

Bu işi yapmak için gereken minimum komut şudur:

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

ve son veri dosyasının aşağıdaki gibi bir şey içermesi gerekir:

--FILEUPLOAD
Content-Disposition: form-data; name="comment"

I love uploading files!

--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; 
Content-Type: application/octet-stream
Media Type: application/octet-stream

Give me some automated file upload action!

--FILEUPLOAD--

Burada birkaç ayrıntı önemlidir:

  1. Veri sonrası dosyadaki satırlar \ r \ n ile sonlandırılır. Tek istisna, dosya bağlamındaki verilerdir.
  2. PostData her SINIR nitelik gerekir wget çağrısında SINIR değerle aynı. (Örnekte FILEUPLOAD)
  3. Tüm sınırlara iki "-" tiresi eklenmiş ve \ r \ n ile sonlandırılmıştır.
  4. Son sınır iki ekstra tire "-" ile eklenmiş ve \ r \ n ile sonlandırılmıştır.
  5. Her veri parçası, dosya içeriği veya parametre değeri "\ r \ n" boş bir satırla çevrilidir

Kontrollü ortamların kıvrıldığı, ancak kıvrılmadığı için bunun birisine yardımcı olabileceğini düşündüm.


İkili dosya ile çalışmak için wget alamadım. Kayıt sonrası veri dosyasının metin bölümünü oluşturdum, sakladım, kullandım cat pic.jpg >> postdata, Not Defteri ++ 'ya yükledim ve son sınır +' - '+ EOL' yi ekledim. W3C Referans
Chloe

@Chloe, bunu başka bir proje için tekrar ziyaret etmek zorunda kaldım ve bu sefer ikili dosyalara ihtiyacım vardı ve beklendiği gibi çalıştığını gördüm. Basit bir php dosyası yükleme sayfası hazırladım ve daha sonra bir tarayıcıdan önce dosya boyutunu aldım ve daha sonra wget kullanmanın sonucuyla karşılaştırdım. Aynı şeyi yapmayı öneririm, çünkü başıboş bir yeni satır tüm sürecin başarısız olmasına neden olabilir.
tu-Reinstate Monica-dor duh,

1
Noktalı virgül eksik. Python tornado --header = "Content-type: multipart / form-data; sınır = FILEUPLOAD" ile ilgili sorunlara neden oldu
FlappySocks
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.