Làm cách nào để tải lên tệp và dữ liệu JSON trong Postman?


134

Tôi đang sử dụng Spring MVC và đây là phương pháp của tôi:

/**
* 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;
        }
    }
}


Tôi cần phải vượt qua id phiên trong postman và cả tập tin. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


221

Trong postman, đặt loại phương thức thành POST .

Sau đó chọn Body -> form-data -> Nhập tên tham số của bạn ( tệp theo mã của bạn)

và ở bên phải bên cạnh cột giá trị, sẽ có "văn bản, tệp" thả xuống , chọn Tệp . chọn tập tin hình ảnh của bạn và gửi nó.

Đối với phần còn lại của các tham số dựa trên "văn bản" , bạn có thể đăng nó như bình thường bạn làm với người đưa thư. Chỉ cần nhập tên tham số và chọn "văn bản" từ menu thả xuống bên phải và nhập bất kỳ giá trị nào cho nó, nhấn nút gửi. Phương thức điều khiển của bạn sẽ được gọi.


4
Tại sao POST? Thế còn PUT?
Xanh

4
"Không làm việc" nghĩa là gì? Tại sao bạn không hiển thị mã của mình để chúng tôi gỡ lỗi dễ dàng?
Sumit Badaya

2
Tôi nhận được phần văn bản như Stringmọi khi. Tại sao nó không ánh xạ tới DTO của tôi? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) Tôi không thể gửi yêu cầu từ người đưa thư trong trường hợp này
Arun Gowda

@ArunGowda Hãy thử đăng câu hỏi của bạn dưới dạng Câu hỏi mới. Vì nó khác với poster câu hỏi ở đây và câu trả lời được đưa ra có liên quan đến câu hỏi được đăng ở đây bởi OP.
Sumit Badaya

1
Tôi tìm thấy giải pháp của tôi. Nó sẽ không RequestDtotự động ánh xạ . Tôi lấy nó làm một chuỗi, phân tích cú pháp Jsonvà ánh xạ nó thành RequestDtorõ ràng.
Arun Gowda

111

Hướng dẫn trực quan mất tích

Trước tiên, bạn phải tìm thấy trình đơn thả xuống màu trắng xám gần như vô hình Filemà là chìa khóa ma thuật mở khóa Choose Filesnút.

Sau khi bạn chọn POST, sau đó chọn Body->form-data, sau đó tìm menu thả xuống Tệp, rồi chọn 'Tệp', chỉ sau đó nút 'Chọn tệp' sẽ xuất hiện một cách kỳ diệu:

Thiết lập tệp POST của Postman - thả xuống (Văn bản, Tệp)


1
bạn đúng ở chỗ UI cho cái này là vô hình đối với người không bắt đầu. Cảm ơn bạn cho phiên bản trực quan!
Vijay

Điều gì xảy ra nếu tôi có tải trọng cơ thể XML và tệp đính kèm?
tuxErrante

Câu trả lời của gce dường như nói rằng bạn có thể làm điều đó một cách dễ dàng? Tôi không chắc . Bạn có thể phải học cách kết hợp tệp đính kèm và XML vào một tài liệu bằng cách tìm hiểu về định dạng mime đa phần. Điều này không quá phức tạp, bạn có thể tạo ra một cơ thể mime nhiều phần bằng tay.
Chris F Carroll

Hai năm sau, UI không được cải thiện.
Sabuncu

47

Có lẽ bạn có thể làm theo cách này:

postman_file_upload_with_json


8
6 tiêu đề bạn đã đặt ở đó là gì?
Xanh

1
Giải pháp này hiệu quả với tôi. Không vượt qua bất kỳ tiêu đề và nó hoạt động tốt. Cảm ơn. Vượt qua JSON là phần khó khăn đối với tôi. :)
Gaurav Sharma

Ha, thông minh - đã thay đổi điểm cuối của tôi để làm điều đó :) Một chút xấu xí nhưng siêu tiện lợi
Chris Koston

Bạn có thể giải thích những gì bạn đang nói về? @ChrisKoston
tlalco

17

Như thế này :

nhập mô tả hình ảnh ở đây

Thân -> dữ liệu biểu mẫu -> chọn tệp

Bạn phải viết "tập tin" thay vì "tên"

Ngoài ra, bạn có thể gửi dữ liệu JSON từ Body -> trường thô. (Chỉ cần dán chuỗi JSON)


3
thực sự tôi cần phải vượt qua một số giá trị và tập tin trong người đưa thư cho một dịch vụ là có thể
Harikrishnan KN

1
Tiêu đề? Những tiêu đề để thiết lập?
Xanh

11
Câu hỏi yêu cầu tải lên dữ liệu json là tốt, không được đề cập ở đây trong câu trả lời này.
Rohit

Cách chính xác để làm điều này: stackoverflow.com/questions/21329426/ từ
dassum

10
  1. Đừng đưa ra bất kỳ tiêu đề.
  2. Đặt dữ liệu json của bạn trong tệp .json.
  3. Chọn cả hai tệp của bạn, một tệp là tệp .txt của bạn và tệp khác là tệp .json cho các khóa param yêu cầu của bạn.

Đây là một câu trả lời tốt .. Điều này cũng có thể được sử dụng cho các trường hợp sử dụng trong đó nhiều tệp phải được tải lên cùng với tải trọng json trong một tải trọng nhiều phần ..
Kiran

Đây là câu trả lời đúng nhất nếu bạn muốn gửi Tệp cũng như dữ liệu JSON. Các ví dụ hiển thị chọn một tệp và sau đó dữ liệu JSON được truyền dưới dạng một giá trị chuỗi JSON đơn hoặc tách các giá trị lên không hoạt động (có thể tùy thuộc vào điểm cuối nhưng tôi không thể xác minh điều này). Nó cũng được đề cập ở đây: github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

Nếu bạn cần như Tải lên tệp trong nhiều phần bằng cách sử dụng dữ liệu biểu mẫu và gửi dữ liệu json (đối tượng Dto) trong cùng một Yêu cầu POST

Nhận đối tượng JSON của bạn dưới dạng Chuỗi trong Trình điều khiển và làm cho nó Giảm dần bằng cách thêm dòng này

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

1
Bạn có thể cho tôi biết hai tiêu đề được sử dụng là gì?
Abhisek Roy

Loại nội dung: application / json Ủy quyền: người mang (yourTokenString)
Ajay k

Vâng, nó đã làm việc. Cảm ơn. Tôi đã sử dụng mã bên dưới và làm việc: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") thử {fileUploadVo = new ObjectMapper (). readValue (jsonFileVo, FileUploadVo. class); } Catch (Ngoại lệ e) {e.printStackTrace (); }
Anand_5050

bạn có thể đặt Kiểu nội dung cho contactDtoString thành ứng dụng / json, bạn có thể làm điều này cho mọi khóa
Hritcu Andrei

7

Postman nhiều mẫu dữ liệu dạng nội dung

Chọn [Loại nội dung] từ [HIỂN THỊ MÀU SẮC] sau đó đặt loại nội dung của "application / json" thành tham số của văn bản json.


6

Nếu ai đó cần:

cơ thể -> dữ liệu biểu mẫu

Thêm tên trường dưới dạng mảng

nhập mô tả hình ảnh ở đây


6

Nếu ai đó muốn gửi dữ liệu json ở định dạng dữ liệu biểu mẫu, chỉ cần khai báo các biến như thế này

Người phát thơ:

Như bạn thấy, tham số mô tả sẽ ở định dạng json cơ bản, kết quả của điều đó:

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

2

Tôi cần phải vượt qua cả hai: một tập tin và một số nguyên. Tôi đã làm theo cách này:

  1. cần thiết để vượt qua một tệp để tải lên: đã thực hiện theo câu trả lời của Sumit.

    Loại yêu cầu: POST

    Thân -> dữ liệu biểu mẫu

    trong tiêu đề KEY , đã nhập tên của biến ('tệp' trong mã phụ trợ của tôi).

    trong phần phụ trợ:

    file = request.files['file']

    Bên cạnh 'tệp', có hộp thả xuống cho phép bạn chọn giữa 'Tệp' hoặc 'Văn bản'. Chọn 'Tệp' và dưới tiêu đề GIÁ TRỊ , 'Chọn tệp' xuất hiện. Nhấp vào cái này mở ra một cửa sổ để chọn tập tin.

2. cần thiết để vượt qua một số nguyên:

đã đi đến:

Params

đã nhập tên biến (ví dụ: id) trong KEY và giá trị của nó (ví dụ: 1) dưới GIÁ TRỊ

trong phần phụ trợ:

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

Đã làm việc!


2

Sử dụng mã dưới đây trong phần còn lại của mùa xuân:

@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();
        }

nhập mô tả hình ảnh ở đây


2

Đối với mỗi khóa dữ liệu biểu mẫu, bạn có thể đặt Loại nội dung, có một nút người đưa thư ở bên phải để thêm cột Loại nội dung và bạn không phải phân tích cú pháp từ một chuỗi bên trong Trình điều khiển của mình.


1

Nếu bạn muốn thực hiện một PUTyêu cầu, chỉ cần thực hiện mọi thứ như một POSTyêu cầu nhưng thêm _method=> PUTvào các form-datatham số của bạn .



0

Nếu bạn đang sử dụng cookie để giữ phiên, bạn có thể sử dụng công cụ chặn để chia sẻ cookie từ trình duyệt đến người đưa thư.

Ngoài ra, để tải lên một tệp, bạn có thể sử dụng tab dữ liệu biểu mẫu trong tab thân trên người đưa thư, Trong đó bạn có thể cung cấp dữ liệu ở định dạng khóa-giá trị và với mỗi khóa, bạn có thể chọn loại văn bản / tệp giá trị. khi bạn chọn tùy chọn loại tệp xuất hiện để tải tệp lên.


2
Đối với những gì bạn đang nhận được 500. bạn có thể vui lòng chia sẻ thêm một số chi tiết
Sandesh Jain

-2

nhập mô tả hình ảnh ở đây

phần còn lại của trình điều khiển [lớp dịch vụ ứng dụng lớp cho nhiều phần con [postman pic] 2 fig


nhìn vào các bức ảnh tôi cung cấp bạn có thể lấy thông tin về bộ điều khiển, dịch vụ, appinitizer, người đưa thư
smk

xin vui lòng không đăng hình ảnh của mã như là giải pháp của bạn. Vui lòng sao chép mã của bạn vào câu trả lời.
Das_Geek
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.