মাল্টিপার্ট / ফর্ম-ডেটার উদাহরণ


106

আমি ভাবছি যে কেউ যদি আমার সাথে মাল্টিপার্ট / ফর্ম-ডেটার একটি উদাহরণ ভাগ করে নিতে পারে:

  1. কিছু ফর্ম পরামিতি
  2. একাধিক ফাইল

4
এখানে যান: w3.org/TR/html401/interact/forms.html#h-17.13.4 ইন 17.13.4 Form content typesতুমি যা খুঁজছ পাবেন।
অ্যান্ড্রু বারবার



মাল্টিপার্ট আপলোড টুকরো টুকরো করে বড় ফাইল আপলোড করে। মাল্টিফাইল আপলোড অনেক ছোট ফাইল আপলোড করে। আপনি কি সম্পর্কে জিজ্ঞাসা করছেন?
গাংনুস

উত্তর:


131

সম্পাদনা : আমি একটি অনুরূপ বজায় রাখছি, তবে এখানে গভীরতর উত্তর: https://stackoverflow.com/a/28380690/895245

ঠিক কী ঘটছে তা দেখতে, ব্যবহার করুন nc -lবা একটি ECHO সার্ভার এবং একটি ব্রাউজার বা সিআরএল এর মতো একটি ব্যবহারকারী এজেন্ট।

ফর্মটি একটি .htmlফাইলে সংরক্ষণ করুন:

<form action="http://localhost:8000" method="post" enctype="multipart/form-data">
  <p><input type="text" name="text" value="text default">
  <p><input type="file" name="file1">
  <p><input type="file" name="file2">
  <p><button type="submit">Submit</button>
</form>

আপলোড করার জন্য ফাইলগুলি তৈরি করুন:

echo 'Content of a.txt.' > a.txt
echo '<!DOCTYPE html><title>Content of a.html.</title>' > a.html

চালান:

nc -l localhost 8000

আপনার ব্রাউজারে এইচটিএমএল খুলুন, ফাইলগুলি নির্বাচন করুন এবং জমাতে ক্লিক করুন এবং টার্মিনালটি পরীক্ষা করুন।

ncপ্রাপ্ত অনুরোধটি মুদ্রণ করে। ফায়ারফক্স পাঠানো হয়েছে:

POST / HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:29.0) Gecko/20100101 Firefox/29.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Cookie: __atuvc=34%7C7; permanent=0; _gitlab_session=226ad8a0be43681acf38c2fab9497240; __profilin=p%3Dt; request_method=GET
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------9051914041544843365972754266
Content-Length: 554

-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="text"

text default
-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain

Content of a.txt.

-----------------------------9051914041544843365972754266
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html

<!DOCTYPE html><title>Content of a.html.</title>

-----------------------------9051914041544843365972754266--

বিকল্পভাবে, সিআরএলকে আপনার ব্রাউজারের ফর্মের মতো একই পোস্টের অনুরোধটি পাঠানো উচিত:

nc -l localhost 8000
curl -F "text=default" -F "file1=@a.html" -F "file1=@a.txt" localhost:8000

আপনি এর সাথে একাধিক পরীক্ষা করতে পারেন:

while true; do printf '' | nc -l localhost 8000; done

43
আপত্তিকর এবং অ অবিলম্বে: সিদ্ধ কাপড়: boundary=---------------------------9051914041544843365972754266হয় দুই হাইফেন খাটো তারপর ডাটা প্রকৃত সীমানা। এটি সমস্ত হাইফেনকে একসাথে দেখতে পাওয়া সত্যিই শক্ত।
ভুয়া নাম

4
curl --trace-ascii <logfilename> ..... প্রেরিত এবং প্রাপ্ত ডেটা দেখার জন্যও কার্যকর।
ক্রেগ হিক্স

curl -trace <logfilename> ....বাইনারি প্রদর্শন করবে। <LF> বনাম <সিআর> <এলএফ> পর্যবেক্ষণে দক্ষ।
ক্রেগ হিক্স

@ ফেকনাম - এই সীমানাটি স্বয়ংক্রিয়ভাবে কার্ল দ্বারা তৈরি হয়েছিল।
ক্রেগ হিক্স

6
সীমানা সর্বদা - খাটো হয়। প্রতিটি মিমি বিভাগ বিভাজক (সীমানা) সামনের দুটি অতিরিক্ত ড্যাশ এবং পিছনের সীমানা বিভাজকটিতে চারটি অতিরিক্ত ড্যাশ থাকে: দুটি সামনের দিকে এবং শেষে দুটি।
সের্গেই কুজনেটসভ

24

@ সিরো সান্তিলির জবাবের জন্য অনেক ধন্যবাদ! আমি দেখতে পেয়েছি যে সীমানার জন্য তাঁর পছন্দটি বেশ "অসন্তুষ্ট" কারণ সমস্ত থোথ হাইফেনস: বাস্তবে, @ ফেইক নেম মন্তব্য করেছিলেন, যখন আপনি আপনার সীমানা অভ্যন্তরের অনুরোধটি ব্যবহার করছেন তখন সামনে আরও দুটি হাইফেন আসে:

উদাহরণ:

POST / HTTP/1.1
HOST: host.example.com
Cookie: some_cookies...
Connection: Keep-Alive
Content-Type: multipart/form-data; boundary=12345

--12345
Content-Disposition: form-data; name="sometext"

some text that you wrote in your html form ...
--12345
Content-Disposition: form-data; name="name_of_post_request" filename="filename.xyz"

content of filename.xyz that you upload in your form with input[type=file]
--12345
Content-Disposition: form-data; name="image" filename="picture_of_sunset.jpg"

content of picture_of_sunset.jpg ...
--12345--

আমি এই w3.org পৃষ্ঠায় খুঁজে পেয়েছি যে একটি গুণিত / ফর্ম-ডেটাতে মাল্টিপার্ট / মিক্সড শিরোনামকে অন্তর্নিবিষ্ট করা সম্ভব, কেবল মাল্টিপার্ট / মিক্সডের অভ্যন্তরে অন্য একটি সীমানা স্ট্রিং বেছে নেওয়া এবং সেইটিকে ডেটা সজ্জিত করতে ব্যবহার করে using শেষের দিকে, পোষ্ট অনুরোধটি বন্ধ করার জন্য আপনার অবশ্যই FILO- এ ব্যবহৃত সমস্ত সীমানা "বন্ধ" করতে হবে (যেমন:

POST / HTTP/1.1
...
Content-Type: multipart/form-data; boundary=12345

--12345
Content-Disposition: form-data; name="sometext"

some text sent via post...
--12345
Content-Disposition: form-data; name="files"
Content-Type: multipart/mixed; boundary=abcde

--abcde
Content-Disposition: file; file="picture.jpg"

content of jpg...
--abcde
Content-Disposition: file; file="test.py"

content of test.py file ....
--abcde--
--12345--

উপরের লিঙ্কটি একবার দেখুন।


4
আপনি কেন সমস্ত সম্পত্তি Content-Dispositionসাথে আলাদা করবেন না ;?
কেলিন

4
'> e <এনক্যাপসুলেট'
ক্রেগ হিকস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.