HTTP पर मल्टीपार्ट / फॉर्म-डेटा के रूप में फाइल अपलोड करने के लिए लिनक्स कमांड लाइन टूल?


22

मैं देख सकता हूं कि wget में एक -post-file विकल्प है, लेकिन मैनपेज कहता है "POST डेटा संचारित करने के लिए Wget वर्तमान में मल्टीपार्ट / फॉर्म-डेटा का समर्थन नहीं करता है; केवल आवेदन / x-www-form-urlencoded है। केवल एक '- -पोस्ट-डेटा 'और' -पोस्ट-फाइल 'निर्दिष्ट किया जाना चाहिए। "

क्या मल्टीपार्ट / फॉर्म-डेटा में फ़ाइलों को अपलोड करने का एक समान तरीका है?

जवाबों:


29

कर्ल का उपयोग करें:

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

15

यह केवल wget के साथ करना संभव है। कम से कम संस्करण 1.13.4 के साथ और शायद अन्य। --पोस्ट-फ़ाइल विकल्प आपको एक फ़ाइल भेजने के लिए निर्दिष्ट करने की अनुमति देता है, जब तक कि पोस्टडेटा फ़ाइल ठीक से निर्मित न हो जाए।

मैंने बाइनरी फाइलों के साथ इसका परीक्षण भी किया है और यह उम्मीद के मुताबिक काम करता है। आपको फ़ाइल को आधारभूत करने की आवश्यकता नहीं है, लेकिन आपको यह सुनिश्चित करने की आवश्यकता है कि आपकी फ़ाइल में सीमा नहीं है।

यह काम करने के लिए आवश्यक न्यूनतम आदेश होगा:

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

और पोस्टडेटा फ़ाइल में कुछ इस तरह की आवश्यकता होगी:

--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--

कई विवरण यहाँ महत्वपूर्ण हैं:

  1. पोस्ट डेटा फ़ाइल में लाइनें \ r \ n के साथ समाप्त की जाती हैं। एकमात्र अपवाद फ़ाइल संदर्भ के अंदर डेटा है।
  2. पोस्टडेटा में प्रत्येक BOUNDARY विशेषता जरूर कॉल करने के लिए कॉल में BOUNDARY मान का मिलान करें। (उदाहरण में FILEUPLOAD)
  3. सभी सीमाएँ दो हाइफ़न "-" और "r \ n" के साथ समाप्त होती हैं
  4. अंतिम सीमा को दो अतिरिक्त हाइफ़न "-" और "r \ n" के साथ समाप्त किया गया है
  5. डेटा, फ़ाइल सामग्री या पैरामीटर मान का प्रत्येक टुकड़ा, एक खाली रेखा "\ r \ n" से घिरा होता है

मैंने सोचा कि यह किसी की मदद कर सकता है क्योंकि कुछ नियंत्रित वातावरणों में विकृति होती है लेकिन कर्ल नहीं।


मुझे बाइनरी फ़ाइल के साथ काम करने के लिए wget नहीं मिल सका। मैंने पोस्ट डेटा फ़ाइल का टेक्स्ट भाग बनाया, सहेजा, उपयोग किया cat pic.jpg >> postdata, नोटपैड ++ में लोड किया गया है, और अंतिम सीमा + + - 'ईओएल' को जोड़ा गया है। W3C संदर्भ
Chloe

@ चलो, मुझे इसे एक और परियोजना के लिए फिर से लिखना था, और इस बार बाइनरी फाइलों की आवश्यकता थी और पाया कि यह उम्मीद के मुताबिक काम किया। मैंने एक साधारण php फ़ाइल अपलोड पृष्ठ का निर्माण किया और फिर इसे ब्राउज़र के माध्यम से पहले फ़ाइल का आकार प्राप्त करने के लिए किया और फिर इसे परिणाम का उपयोग करने से तुलना किया। मेरा सुझाव है कि आप ऐसा ही करें क्योंकि एक आवारा न्यूलाइन पूरी प्रक्रिया को विफल कर सकता है।
tudor

1
एक अर्धविराम गायब है। इसने अजगर के बवंडर के साथ समस्याएँ पैदा कीं --header = "सामग्री-प्रकार: मल्टीपार्ट / फ़ॉर्म-डेटा, सीमा = FILEUPLOAD"
FlappySocks
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.