রেস্ট - জেএসএনের সাথে এইচটিটিপি পোস্ট মাল্টিপার্ট


89

আমার এইচটিটিপি পোস্ট মাল্টিপার্ট পেতে হবে যাতে মাত্র ২ টি প্যারামিটার রয়েছে:

  • একটি JSON স্ট্রিং
  • একটি বাইনারি ফাইল

শরীর নির্ধারণের সঠিক উপায় কোনটি? আমি ক্রোম আরএসটি কনসোল ব্যবহার করে এইচটিটিপি কলটি পরীক্ষা করতে যাচ্ছি, তাই আমি ভাবছিলাম যে সঠিক সমাধানটি যদি JSON প্যারামিটার এবং বাইনারি ফাইলের জন্য একটি "লেবেল" কী সেট করে।

সার্ভার সাইডে আমি রিসেটেসি ২.x ব্যবহার করছি এবং আমি মাল্টি পার্ট বডিটি এভাবে পড়তে যাচ্ছি:

@POST
@Consumes("multipart/form-data")
public String postWithPhoto(MultipartFormDataInput  multiPart) {
  Map <String, List<InputPart>> params = multiPart.getFormDataMap();
  String myJson = params.get("myJsonName").get(0).getBodyAsString();
  InputPart imagePart = params.get("photo").get(0);
  //do whatever I need to do with my json and my photo
}

এই কি এই পথ? "মাইজেসননাম" কীটি ব্যবহার করে আমার জেএসএন স্ট্রিংটি পুনরুদ্ধার করা সঠিক যে সেই নির্দিষ্ট সামগ্রী-স্বভাবকে চিহ্নিত করে? একটি এইচটিটিপি মাল্টিপার্ট অনুরোধে এই 2 টি সামগ্রী পাওয়ার কী অন্য কোনও উপায় আছে?

আগাম ধন্যবাদ


4
এটি কোন ধরণের আরএসটি রিসোর্স? কীভাবে দুটি অংশ সম্পদ স্তরের সাথে সম্পর্কিত?

প্রকৃতপক্ষে আমরা এই সংস্থানটি যেভাবে পরিচালনা করেছি তা পুরোপুরি বিশ্রামের নয় কারণ চিত্রটি অন্য সংস্থানটির পরিবর্তে উত্সটির একটি "উপাদান"।
থার্মজ

উত্তর:


149

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনি HTTP / REST কনসোল থেকে ম্যানুয়ালি একটি মাল্টিপার্ট অনুরোধ রচনা করতে চান। মাল্টিপার্ট ফর্ম্যাট সহজ; একটি সংক্ষিপ্ত পরিচিতি এইচটিএমএল 4.01 স্পেক পাওয়া যাবে । আপনাকে একটি সীমানা নিয়ে আসা দরকার, যা স্ট্রিংটি সামগ্রীতে পাওয়া যায় না, আসুন আমরা বলি HereGoes। আপনি অনুরোধ শিরোনাম সেট করুন Content-Type: multipart/form-data; boundary=HereGoes। তারপরে এটি একটি বৈধ অনুরোধ সংস্থা হওয়া উচিত:

--HereGoes
Content-Disposition: form-data; name="myJsonString"
Content-Type: application/json

{"foo": "bar"}
--HereGoes
Content-Disposition: form-data; name="photo"
Content-Type: image/jpeg
Content-Transfer-Encoding: base64

<...JPEG content in base64...>
--HereGoes--

আপনি সাবান-ইউআই তে আসলে একটি সংযুক্তি যুক্ত করতে পারেন। এটি প্রকৃত পোস্ট বডি এবং সামগ্রী-ধরণের পাস করতে হবে।
শানে লি

4
অনন্য সীমানাটি নিয়ে আসার জন্য কি কোনও মানক উপায় আছে?
অ্যান্ডিগ

4
@ অ্যান্ডিগ আমি কারও সম্পর্কে সচেতন নই সম্ভবত আপনি একটি ইউইউডি ব্যবহার করতে পারেন , তবে এটি অগত্যা একটি ভাল ধারণা নয়। সাধারণত আপনার এইচটিটিপি লাইব্রেরির আপনার যত্ন নেওয়া উচিত।
ভাসিলি ফারোনভ

যদি আমরা জানতে পারি যে আমাদের কাছে অনুরোধে কেবল জসন এবং বেস 64 আছে তবে \*উদাহরণস্বরূপ সীমানা হিসাবে কাজ করা উচিত নয় ? এটি জাসন বা বেস 64 তে উপস্থিত থাকার অনুমতি নেই।
দইদালুস

4
JPEG ডেটা এনকোড করতে বেস 64 কেন ব্যবহার করবেন? এইচটিটিপি আপনাকে কাঁচা বাইট পাঠাতে দেয়।
আলেকজান্দার ব্লিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.