העלאה מרובת חלקים עם HttpClient 4

1. סקירה כללית

במדריך זה נדגים כיצד לעשות זאת פעולת העלאה מרובת חלקים באמצעות HttpClient 4.

נשתמש //echo.200please.com כשרת בדיקה מכיוון שהוא ציבורי והוא מקבל את רוב סוגי התוכן.

אם אתה רוצה להעמיק ו למד דברים מגניבים אחרים שאתה יכול לעשות עם HttpClient - עבור אל הדרכה הראשית של HttpClient.

2. באמצעות AddPart שיטה

נתחיל בהסתכלות על MultipartEntityBuilder להתנגד ל להוסיף חלקים לישות Http לאחר מכן יעלה באמצעות פעולת POST.

זוהי שיטה כללית להוסיף חלקים ל- HttpEntity המייצג את הטופס.

דוגמא 2.1. - העלאת טופס עם שני חלקי טקסט וקובץ

קובץ קובץ = קובץ חדש (textFileName); HttpPost post = HttpPost new ("// echo.200please.com"); FileBody fileBody = FileBody חדש (קובץ, ContentType.DEFAULT_BINARY); StringBody stringBody1 = חדש StringBody ("הודעה 1", ContentType.MULTIPART_FORM_DATA); StringBody stringBody2 = חדש StringBody ("הודעה 2", ContentType.MULTIPART_FORM_DATA); // בונה MultipartEntityBuilder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addPart ("upfile", fileBody); builder.addPart ("text1", stringBody1); builder.addPart ("text2", stringBody2); ישות HttpEntity = builder.build (); // post.setEntity (ישות); תגובה HttpResponse = client.execute (פוסט);

שים לב שאנחנו מייצרים את ה- קוֹבֶץ אובייקט על ידי ציון גם סוג תוכן ערך שישמש את השרת.

כמו כן, שים לב כי ה- addPart לשיטה שני טיעונים, מתנהגים כמו ערך מפתח זוגות לטופס. אלה רלוונטיים רק אם צד השרת באמת מצפה ומשתמש בשמות פרמטרים - אחרת, הם פשוט מתעלמים.

3. באמצעות addBinaryBody ו addTextBody שיטות

דרך ישירה יותר ליצור ישות מרובת חלקים היא להשתמש ב- addBinaryBody ו AddTextBody שיטות. שיטות אלה פועלות להעלאת טקסט, קבצים, מערכי תווים ו- InputStream חפצים. בואו להמחיש כיצד בעזרת דוגמאות פשוטות.

דוגמא 3.1. - העלאת טקסט וחלק מקובץ טקסט

HttpPost post = HttpPost new ("// echo.200please.com"); קובץ קובץ = קובץ חדש (textFileName); הודעת מחרוזת = "זהו פוסט מרובה חלקים"; MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", file, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("טקסט", הודעה, ContentType.DEFAULT_BINARY); // HttpEntity ישות = builder.build (); post.setEntity (ישות); תגובה HttpResponse = client.execute (פוסט);

שים לב שה- FileBody ו StringBody אין צורך בחפצים כאן.

חשוב גם שרוב השרתים לא בודקים את ה- סוג תוכן של גוף הטקסט, כך addTextBody השיטה עשויה להשמיט את סוג תוכן ערך.

ה addBinaryBody API מקבל א סוג תוכן - אבל זה גם ניתן ליצור את הישות רק מגוף בינארי ואת שם פרמטר הטופס המחזיק את הקובץ. כאמור בסעיף הקודם כמה שרתים לא יזהו את הקובץ אם סוג תוכן הערך לא צוין.

לאחר מכן נוסיף קובץ zip כ- InputStream, בעוד שקובץ התמונה יתווסף כ- קוֹבֶץ לְהִתְנַגֵד:

דוגמא 3.2. - מעלה אקובץ מיקוד, קובץ תמונה וחלק טקסט

HttpPost post = HttpPost new ("// echo.200please.com"); InputStream inputStream = FileInputStream חדש (zipFileName); קובץ קובץ = קובץ חדש (imageFileName); הודעת מחרוזת = "זהו פוסט מרובה חלקים"; MultipartEntityBuilder builder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", קובץ, ContentType.DEFAULT_BINARY, imageFileName); builder.addBinaryBody ("upstream", inputStream, ContentType.create ("application / zip"), zipFileName); builder.addTextBody ("טקסט", הודעה, ContentType.TEXT_PLAIN); // HttpEntity ישות = builder.build (); post.setEntity (ישות); תגובה HttpResponse = client.execute (פוסט);

שים לב שה- סוג תוכן ניתן ליצור ערך בזמן, כפי שקורה בדוגמה לעיל עבור קובץ ה- zip.

לבסוף, לא כל השרתים מאשרים InputStream חלקים. השרת שהזמנו בשורה הראשונה של הקוד מזהה InputStreamס.

בואו נסתכל על דוגמה אחרת היכן addBinaryBody עובד ישירות עם מערך בתים:

דוגמא 3.3. - העלאת מערך וטקסט של בתים

HttpPost post = HttpPost new ("// echo.200please.com"); הודעת מחרוזת = "זהו פוסט מרובה חלקים"; בתים [] בתים = "קוד בינארי" .getBytes (); // בונה MultipartEntityBuilder = MultipartEntityBuilder.create (); builder.setMode (HttpMultipartMode.BROWSER_COMPATIBLE); builder.addBinaryBody ("upfile", בתים, ContentType.DEFAULT_BINARY, textFileName); builder.addTextBody ("טקסט", הודעה, ContentType.TEXT_PLAIN); // HttpEntity ישות = builder.build (); post.setEntity (ישות); תגובה HttpResponse = client.execute (פוסט);

שימו לב ל סוג תוכן - שמפרט כעת נתונים בינאריים.

4. מסקנה

מאמר זה הציג את MultipartEntityBuilder כאובייקט גמיש המציע אפשרויות API מרובות ליצירת טופס מרובה חלקים.

הדוגמאות הראו גם כיצד להשתמש ב- HttpClient להעלות HttpEntity הדומה לישות צורה.

יישום כל הדוגמאות וקטעי הקוד ניתן למצוא בפרויקט GitHub שלנו - זהו פרויקט מבוסס ליקוי חמה, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.


$config[zx-auto] not found$config[zx-overlay] not found