הורד תמונה או קובץ עם Spring MVC

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

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

עם זאת, לפעמים יש צורך בנתיב הבקר - ובכך נתמקד במאמר מהיר זה.

2. תלות Maven

ראשית, נצטרך להוסיף תלות שלנו pom.xml:

 org.springframework.boot spring-boot-starter-web 

זה הכל, אנחנו לא צריכים שום דבר אחר כאן. למידע על גרסאות, עבור אל Maven Central.

3. שימוש @ResponseBody

הפיתרון הישיר הראשון הוא שימוש ב- @ResponseBody הערה על שיטת בקר כדי לציין שהאובייקט שהוחזר על ידי השיטה צריך להיות מועבר ישירות לגוף התגובה HTTP:

@GetMapping ("/ get-text") ציבורי @ResponseBody מחרוזת getText () {להחזיר "שלום עולם"; } 

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

עם @ResponseBody אנו יכולים להחזיר כמעט כל סוג מדיה, כל עוד יש לנו ממיר הודעות HTTP מתאים שיכול לטפל ולארגן את זה לזרם הפלט.

4. שימוש מייצר לתמונות חוזרות

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

@GetMapping (value = "/ image") ציבורי @ResponseBody בייט [] getImage () זורק IOException {InputStream in = getClass () .getResourceAsStream ("/ com / baeldung / produceimage / image.jpg"); החזר IOUtils.toByteArray (ב); } 

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

כדי להגדיר שמערך הבתים המוחזר תואם תמונה, אנו יכולים להגדיר את מייצר תכונה של @GetMapping ביאור לדיוק סוג MIME של האובייקט שהוחזר:

@GetMapping (value = "/ get-image-with-media-type", produce = MediaType.IMAGE_JPEG_VALUE) בתים ציבוריים @ResponseBody [] getImageWithMediaType () זורק IOException {InputStream ב- = getClass () .getResourceAsStream ("/ com / baeldung /produceimage/image.jpg "); החזר IOUtils.toByteArray (ב); } 

פה מייצר נקבע ל MediaType.IMAGE_JPEG_VALUE כדי לציין שיש להתמודד עם האובייקט שהוחזר כתמונת JPEG.

ועכשיו, הדפדפן יזהה ויציג כראוי את גוף התגובה כתמונה.

5. שימוש מייצר להחזרת נתונים גולמיים

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

לכן, אם אנו רוצים להחזיר קובץ גולמי, נוכל פשוט להשתמש בו APPLICATION_OCTET_STREAM_VALUE:

@GetMapping (value = "/ get-file", מייצר = MediaType.APPLICATION_OCTET_STREAM_VALUE) בתים ציבוריים @ ResponseBody [] getFile () זורק IOException {InputStream ב- = getClass (). GetResourceAsStream ("/ com / baeldung / produceimage / data.t "); החזר IOUtils.toByteArray (ב); } 

6. מסקנה

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

וכמו תמיד, ניתן למצוא את קוד הדוגמה ב- Github.


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