Multipart ในโปรโตคอล Http คืออะไร? ต่อไปนี้เป็นข้อความที่ตัดตอนมาจาก http protocol 1.1:
ในกรณีของเอนทิตีที่มีหลายส่วน โดยที่ชุดข้อมูลที่แตกต่างกันอย่างน้อยหนึ่งชุดถูกรวมเข้าเป็นเนื้อหาเดียว ฟิลด์ประเภท "หลายส่วน" จะต้องปรากฏในส่วนหัวของเอนทิตี (ฟิลด์ส่วนหัว) เนื้อความจะต้องประกอบด้วยส่วนต่างๆ ของร่างกายตั้งแต่หนึ่งส่วนขึ้นไป โดยแต่ละส่วนนำหน้าเส้นคั่นขอบเขต และส่วนสุดท้ายตามด้วยเส้นคั่นขอบเขตที่สิ้นสุด หลังจากบรรทัดตัวคั่นขอบเขต แต่ละส่วนเนื้อหาจะประกอบด้วยฟิลด์ส่วนหัว บรรทัดว่าง และเนื้อหา
คำอธิบายข้างต้นอาจดูสับสนเล็กน้อยในการเขียน แต่ความเข้าใจง่ายๆ อาจเป็นดังนี้: คำขอโพสต์สามารถกำหนดหลายส่วนตามข้อกำหนดบางอย่าง
ต่อไปนี้ใช้โปรโตคอล mobile mesh (อันที่จริง คำขอมีเนื้อหา xml อิสระสองรายการ ได้แก่ head xml และ body xml) เพื่อแสดงวิธีใช้ Jersey เพื่อประมวลผล Multipart รหัสหลักจะเป็นดังนี้ (เซิร์ฟเวอร์ได้รับรหัสดังกล่าวตั้งแต่ต้น) ฉันเขียนโค้ดไม่เป็น และไม่รู้ว่าคนอื่นเขียนยังไง ต่อมาพอฉันโกรธฉันก็ถอดรหัสแพ็คเกจ jersey-multipart-1.0.3.1.jar แล้วดู แล้วฉันก็เข้าใจ):
สาธารณะคงสุดท้าย String HeadFieldName = "xmlhead";
สาธารณะคงสุดท้าย String BodyFieldName = "xmlbody";
//ลูกค้าส่งรหัส
โพสต์สตริงคงที่สาธารณะ (หัวสตริง, เนื้อความของสตริง) พ่น BusinessException {
FormDataMultiPart multiPart = ใหม่ FormDataMultiPart();
multiPart.field (RequestField.HeadFieldName, หัว, MediaType.MULTIPART_FORM_DATA_TYPE);
multiPart.field (RequestField.BodyFieldName, เนื้อความ, MediaType.MULTIPART_FORM_DATA_TYPE);
กลับ webResource.type("multipart/form-data").post(String.class, multiPart);
-
//ฝั่งเซิร์ฟเวอร์รับโค้ด
@โพสต์
@ผลิต ({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA})
@Consumes ({MediaType.APPLICATION_XML, MediaType.MULTIPART_FORM_DATA})
บริการสตริงสาธารณะ (FormDataMultiPart multiPart) ส่งข้อยกเว้น {
ถ้า (หลายส่วน == null){
ถ้า(_logger.isErrorEnabled()){
_logger.error("คำขอ FormDataMultiPart เป็นโมฆะ");
-
โยนข้อยกเว้นใหม่ ("คำขอ FormDataMultiPart เป็นโมฆะ");
-
รายการ <RequestField> requestFields = ใหม่ ArrayList<RequestField>();
สำหรับ (BodyPart bodyPart : multiPart.getBodyParts()){
สตริง fieldName = ((FormDataBodyPart)bodyPart).getName().trim();
ถ้า (fieldName.equalsIgnoreCase (RequestField.HeadFieldName)){
requestFields.add (RequestField ใหม่ (fieldName, bodyPart.getEntityAs (String.class))));
-
อื่นถ้า (fieldName.equalsIgnoreCase (RequestField.BodyFieldName)){
requestFields.add (RequestField ใหม่ (fieldName, bodyPart.getEntityAs (String.class))));
-
อื่น{
ถ้า(_logger.isWarnEnabled()){
_logger.warn("ชื่อฟิลด์ไม่ถูกต้อง:" + fieldName + ",originXml:" + bodyPart.getEntityAs(String.class));
-
-
-
-
-
<?xml version="1.0" encoding="UTF-8"?>
<อินเตอร์บอส>
<เวอร์ชัน>0100</เวอร์ชัน>
<TestFlag>0</TestFlag>
<ชนิด BIP>
<BIPCode>BIP2B543</BIPCode>
<รหัสกิจกรรม>T2001543</รหัสกิจกรรม>
<แอคชั่นโค้ด>0</แอคชั่นโค้ด>
</ชนิด BIP>
<ข้อมูลเส้นทาง>
<OrigDomain>IMPS</OrigDomain>
<ประเภทเส้นทาง>01</ประเภทเส้นทาง>
<การกำหนดเส้นทาง>
<โฮมโดเมน>บอส</โฮมโดเมน>
<ค่าเส้นทาง>13810494631</ค่าเส้นทาง>
</การกำหนดเส้นทาง>
</ข้อมูลเส้นทาง>
<ทรานส์อินโฟ>
<รหัสเซสชัน>2013050815143783928824</รหัสเซสชัน>
<TransIDO>2013050815143783928824</TransIDO>
<TransIDOTime>20130508151437</TransIDOTime>
</ทรานส์อินโฟ>
</อินเตอร์บอส>
--ขอบเขต_1_30911772_1367997277472
การจัดการเนื้อหา: form-data;name="xmlbody"
ประเภทเนื้อหา: multipart/form-data
<?xml version="1.0" encoding="UTF-8"?>
<อินเตอร์บอส>
<SvcCont><![CDATA[<subscribeServiceReq>
<msgTransactionID>210001BIP2B543130508151437477294</msgTransactionID>
<สมัครสมาชิกServInfo>
<oprTime>20130508151436</oprTime>
<แอคชั่นไอดี>06</แอคชั่นไอดี>
<effTime>20130508151437</effTime>
<หมดอายุเวลา>30000101000000</หมดอายุเวลา>
<feeUser_ID>13810494631</feeUser_ID>
<destUser_ID>13810494631</destUser_ID>
<actionReasonID>1</actionReasonID>
<servType>210001</servType>
<subServType>FXCJHY</subServType>
<SPID>901508</SPID>
<SPServID>FXCJHY</SPServID>
<โหมดการเข้าถึง>01</โหมดการเข้าถึง>
<feeType>2</feeType>
</subscribeServInfo>
</subscribeServiceReq>]]></SvcCont>
</อินเตอร์บอส>
--ขอบเขต_1_30911772_1367997277472--