วิธีอัปโหลดไฟล์และข้อมูล JSON ในบุรุษไปรษณีย์


138

ฉันใช้ Spring MVC และนี่คือวิธีของฉัน:

/**
* Upload single file using Spring Controller.
*/
@RequestMapping(value = "/uploadFile", method = RequestMethod.POST)
public @ResponseBody ResponseEntity<GenericResponseVO<? extends IServiceVO>> uploadFileHandler(
            @RequestParam("name") String name,
            @RequestParam("file") MultipartFile file,
            HttpServletRequest request,
            HttpServletResponse response) {

    if (!file.isEmpty()) {
        try {
            byte[] bytes = file.getBytes();

            // Creating the directory to store file
            String rootPath = System.getProperty("catalina.home");
            File dir = new File(rootPath + File.separator + "tmpFiles");
            if (!dir.exists()) {
                dir.mkdirs();
            }

            // Create the file on server
            File serverFile = new File(dir.getAbsolutePath() + File.separator + name);
            BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(serverFile));
            stream.write(bytes);
            stream.close();

            System.out.println("Server File Location=" + serverFile.getAbsolutePath());

            return null;
        } catch (Exception e) {
            return null;
        }
    }
}


ฉันต้องส่งรหัสเซสชันในบุรุษไปรษณีย์และไฟล์ด้วย ฉันจะทำเช่นนั้นได้อย่างไร?


หลังจากทั้งหมดถูกแจ้งและเสร็จสิ้นสิ่งนี้ได้แก้ไขปัญหาของฉันแล้ว[]ให้เพิ่มชื่อพารามิเตอร์การอัปโหลดไฟล์เช่น image[] file[] upload[]
rwsenfuka

คำตอบ:


227

ในบุรุษไปรษณีย์กำหนดชนิดของวิธีการในการโพสต์

จากนั้นเลือก Body -> form-data -> ป้อนชื่อพารามิเตอร์ของคุณ ( ไฟล์ตามรหัสของคุณ)

และทางด้านขวาติดกับคอลัมน์ค่าจะมีการเลื่อนลงข้อความ "แฟ้ม"เลือกไฟล์ เลือกไฟล์ภาพของคุณและโพสต์

สำหรับพารามิเตอร์ตาม "ข้อความ" ที่เหลือคุณสามารถโพสต์ได้เหมือนปกติกับบุรุษไปรษณีย์ เพียงป้อนชื่อพารามิเตอร์และเลือก "ข้อความ" จากเมนูแบบเลื่อนลงด้านขวาและป้อนค่าใด ๆ จากนั้นกดปุ่มส่ง ควรเรียกวิธีการควบคุมของคุณ


4
ทำไมPOST? เกี่ยวกับอะไรPUT?
กรีน

4
คำว่า "ไม่ทำงาน" หมายความว่าอย่างไร ทำไมคุณไม่แสดงรหัสของคุณเพื่อให้เราแก้ไขปัญหาได้อย่างง่ายดาย?
Sumit Badaya

2
ฉันได้รับส่วนข้อความเช่นStringเคย เหตุใดจึงไม่จับคู่กับ DTO ของฉัน @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) เอี่ยมไม่สามารถส่งคำร้องจากบุรุษไปรษณีย์ได้ในกรณีนี้
อรุณโกวดา

@ArunGowda ลองโพสต์คำถามของคุณเป็นคำถามใหม่ เนื่องจากมันแตกต่างจากโปสเตอร์คำถามที่นี่และคำตอบที่ได้รับนั้นเกี่ยวข้องกับคำถามที่ OP โพสต์ไว้ที่นี่
Sumit Badaya

1
ฉันพบทางออกของฉันแล้ว จะไม่จับคู่RequestDtoโดยอัตโนมัติ ฉันเอามันมาเป็นสตริงแยกวิเคราะห์Jsonและแมปให้RequestDtoชัดเจน
อรุณโกวดา

113

คู่มือภาพที่ขาดหายไป

คุณต้องแรกพบว่าเกือบมองไม่เห็นสีซีดสีเทาบนสีขาวแบบเลื่อนลงสำหรับFileซึ่งเป็นกุญแจสำคัญมายากลที่ปลดล็อคChoose Filesปุ่ม

หลังจากที่คุณเลือกPOST, จากนั้นเลือกBody->form-data, แล้วพบเลื่อนลงแฟ้มแล้วเลือก 'File' เพียงแล้วจะ 'เลือกไฟล์ปุ่ม' อย่างน่าอัศจรรย์ปรากฏขึ้น:

การตั้งค่าไฟล์ Postman POST - ไฮไลต์แบบเลื่อนลง (ข้อความไฟล์)


1
คุณถูกต้องที่ UI สำหรับสิ่งนี้จะมองไม่เห็นสำหรับผู้ที่ไม่ได้เริ่มต้น ขอบคุณสำหรับเวอร์ชันวิชวล!
Vijay

จะเกิดอะไรขึ้นถ้าฉันมีส่วนเนื้อหา XML และสิ่งที่แนบมา
tuxErrante

คำตอบของ gce ดูเหมือนจะบอกว่าคุณสามารถทำได้อย่างง่ายดายเพียงพอหรือไม่? ฉันไม่แน่ใจ . คุณอาจต้องเรียนรู้วิธีรวมไฟล์แนบและ XML ไว้ในเอกสารเดียวโดยเรียนรู้เกี่ยวกับรูปแบบละครใบ้หลายส่วน ซึ่งไม่ซับซ้อนเกินไปคุณสามารถสร้างร่างละครใบ้หลายส่วนด้วยมือได้
Chris F Carroll

สองปีต่อมา UI ไม่ได้รับการปรับปรุงใด ๆ
Sabuncu

47

บางทีคุณอาจทำได้ด้วยวิธีนี้:

postman_file_upload_with_json


8
คุณตั้งค่าส่วนหัว 6 ส่วนใดไว้ที่นั่น
กรีน

1
วิธีนี้ใช้ได้ผลสำหรับฉัน ไม่ผ่านส่วนหัวใด ๆ และใช้งานได้ดี ขอบคุณ การส่ง JSON เป็นส่วนที่ยุ่งยากสำหรับฉัน :)
Gaurav Sharma

ฮ่าฉลาด - เปลี่ยนจุดสิ้นสุดของฉันเพื่อทำสิ่งนั้น :) น่าเกลียดไปหน่อย แต่สะดวกสุด ๆ
Chris Koston

คุณสามารถอธิบายสิ่งที่คุณกำลังพูดถึง? @ChrisKoston
tlalco

17

แบบนี้ :

ใส่คำอธิบายภาพที่นี่

เนื้อหา -> แบบฟอร์มข้อมูล -> เลือกไฟล์

คุณต้องเขียน "ไฟล์" แทน "ชื่อ"

นอกจากนี้คุณสามารถส่งข้อมูล JSON จาก Body -> raw field (เพียงวางสตริง JSON)


3
ที่จริงฉันต้องส่งค่าและไฟล์บางอย่างในบุรุษไปรษณีย์สำหรับบริการเดียวที่เป็นไปได้
Harikrishnan KN

1
ส่วนหัว? จะตั้งค่าส่วนหัวอะไร
กรีน

11
คำถามนี้ขอให้อัปโหลดข้อมูล json ด้วยซึ่งไม่ได้กล่าวถึงในคำตอบนี้
Rohit

วิธีการที่ถูกต้องในการดำเนินการนี้stackoverflow.com/questions/21329426/…
dassum

10
  1. อย่าให้ส่วนหัวใด ๆ
  2. ใส่ข้อมูล json ของคุณไว้ในไฟล์. json
  3. เลือกไฟล์ทั้งสองไฟล์คือไฟล์. txt ของคุณและไฟล์อื่น ๆ คือไฟล์. json สำหรับคีย์พารามิเตอร์คำขอของคุณ

นี่เป็นคำตอบที่ดี .. นอกจากนี้ยังสามารถใช้สำหรับกรณีการใช้งานที่ต้องอัปโหลดไฟล์หลายไฟล์พร้อมกับข้อมูล json ใน payload แบบหลายส่วน ..
Kiran

นี่เป็นคำตอบที่ถูกต้องที่สุดหากคุณต้องการส่งไฟล์และข้อมูล JSON ตัวอย่างการแสดงการเลือกไฟล์จากนั้นข้อมูล JSON ที่ส่งผ่านเป็นค่าสตริง JSON เดียวหรือการแยกค่าออกใช้ไม่ได้ (อาจขึ้นอยู่กับจุดสิ้นสุด แต่ฉันไม่สามารถตรวจสอบได้) นอกจากนี้ยังมีการกล่าวถึงที่นี่: github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

หากคุณต้องการเช่นอัปโหลดไฟล์ในหลายส่วนโดยใช้ข้อมูลแบบฟอร์มและส่งข้อมูลjson (วัตถุ Dto) ในคำขอโพสต์เดียวกัน

รับอ็อบเจ็กต์ JSON เป็น String ใน Controller และทำให้ Deserialize โดยเพิ่มบรรทัดนี้

ContactDto contactDto  = new ObjectMapper().readValue(yourJSONString, ContactDto.class);

1
ช่วยบอกหน่อยได้ไหมว่าสองส่วนหัวใช้อะไร
Abhisek Roy

Content-Type: application / json Authorization: bearer (yourTokenString)
Ajay k

ใช่มันได้ผล ขอบคุณ ฉันใช้โค้ดด้านล่างและใช้งานได้: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") สาธารณะ UploadFileResponse uploadFile (@RequestParam ("file") ไฟล์ MultipartFile, String jsonFileVo) {FileUploadVo fileUploadVo = null; ลองใช้ {fileUploadVo = ObjectMapper ใหม่ () readValue (jsonFileVo, FileUploadVo.class); } จับ (ข้อยกเว้นจ) {e.printStackTrace (); }
Anand_5050

คุณสามารถตั้งค่า Content-Type สำหรับ contactDtoString เป็น application / json คุณสามารถทำได้ทุกคีย์
Hritcu Andrei

8

Postman หลายส่วนฟอร์ม - ข้อมูลชนิดเนื้อหา

เลือก [ประเภทเนื้อหา] จาก [SHOW COLUMNS] จากนั้นตั้งค่าประเภทเนื้อหาของ "application / json" เป็นพารามิเตอร์ของข้อความ json



6

หากใครต้องการส่งข้อมูล json ในรูปแบบข้อมูลเพียงแค่ต้องประกาศตัวแปรเช่นนี้

บุรุษไปรษณีย์:

ดังที่คุณเห็นพารามิเตอร์คำอธิบายจะอยู่ในรูปแบบ json พื้นฐานซึ่งเป็นผลมาจาก:

{ description: { spanish: 'hola', english: 'hello' } }

2

ฉันต้องการส่งทั้งไฟล์และจำนวนเต็ม ฉันทำแบบนี้:

  1. จำเป็นต้องส่งไฟล์เพื่ออัปโหลด: ทำตามคำตอบของ Sumit

    ประเภทคำขอ: โพสต์

    เนื้อหา -> แบบฟอร์มข้อมูล

    ภายใต้หัวข้อKEYป้อนชื่อของตัวแปร ('file' ในรหัสแบ็กเอนด์ของฉัน)

    ในแบ็กเอนด์:

    file = request.files['file']

    ถัดจาก "ไฟล์" มีช่องแบบเลื่อนลงซึ่งให้คุณเลือกระหว่าง "ไฟล์" หรือ "ข้อความ" เลือก "ไฟล์" และภายใต้หัวข้อVALUE "เลือกไฟล์" จะปรากฏขึ้น คลิกที่นี่เพื่อเปิดหน้าต่างเพื่อเลือกไฟล์

2. จำเป็นต้องส่งจำนวนเต็ม:

เคยไปที่:

params

ป้อนชื่อตัวแปร (เช่น id) ภายใต้KEYและค่า (เช่น 1) ภายใต้VALUE

ในแบ็กเอนด์:

id = request.args.get('id')

ทำงาน!


2

ใช้รหัสด้านล่างในด้านพักสปริง:

@PostMapping(value = Constant.API_INITIAL + "/uploadFile")
    public UploadFileResponse uploadFile(@RequestParam("file") MultipartFile file,String jsonFileVo) {
        FileUploadVo fileUploadVo = null;
        try {
            fileUploadVo = new ObjectMapper().readValue(jsonFileVo, FileUploadVo.class);
        } catch (Exception e) {
            e.printStackTrace();
        }

ใส่คำอธิบายภาพที่นี่


2

สำหรับคีย์ข้อมูลแต่ละแบบที่คุณสามารถตั้งค่า Content-Type ได้จะมีปุ่มบุรุษไปรษณีย์ทางด้านขวาเพื่อเพิ่มคอลัมน์ Content-Type และคุณไม่จำเป็นต้องแยกวิเคราะห์ json จากสตริงภายในคอนโทรลเลอร์ของคุณ


1

หากคุณต้องการPUTส่งคำขอเพียงแค่ทำทุกอย่างตามPOSTคำขอ แต่เพิ่ม_method=> PUTให้กับform-dataพารามิเตอร์ของคุณ


1

วิธีการส่งข้อมูล mulitpart ซึ่งมีไฟล์ที่มีข้อมูล json มีดังต่อไปนี้เราจำเป็นต้องตั้งค่าประเภทเนื้อหาของฟิลด์คีย์ json ตามลำดับเป็น 'application / json' ในแท็บ postman body ดังต่อไปนี้:

ภาพลิงค์นี้จะบอกคุณเกี่ยวกับการส่งภาพด้วยข้อมูล json


0

หากคุณใช้คุกกี้เพื่อเก็บเซสชันคุณสามารถใช้interceptorเพื่อแบ่งปันคุกกี้จากเบราว์เซอร์ไปยังบุรุษไปรษณีย์

ในการอัปโหลดไฟล์คุณสามารถใช้แท็บข้อมูลแบบฟอร์มใต้แท็บเนื้อหาในบุรุษไปรษณีย์ซึ่งคุณสามารถให้ข้อมูลในรูปแบบคีย์ - ค่าและสำหรับแต่ละคีย์คุณสามารถเลือกประเภทของข้อความ / ไฟล์ค่าได้ เมื่อคุณเลือกตัวเลือกประเภทไฟล์ดูเหมือนว่าจะอัปโหลดไฟล์


2
สำหรับสิ่งที่คุณจะได้รับ 500 คุณช่วย
เล่า
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.