Postman'da bir dosya ve JSON verileri nasıl yüklenir?


136

Spring MVC kullanıyorum ve bu benim yöntemim:

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


Postacıda oturum kimliğini ve ayrıca dosyayı iletmem gerekiyor. Bunu nasıl yapabilirim?

Yanıtlar:


223

Postacıda yöntem türünü POST olarak ayarlayın .

Ardından Gövde -> form-verisi -> Parametre adınızı girin ( kodunuza göre dosya )

ve sağ tarafta değer sütununun yanında, "metin, dosya" açılır menüsü olacaktır , Dosya'yı seçin . resim dosyanızı seçin ve yayınlayın.

Geri kalan "metin" tabanlı parametreler için , normalde postacıda yaptığınız gibi gönderebilirsiniz. Sadece parametre adını girin ve sağ taraftaki açılır menüden "metin" i seçin ve bunun için herhangi bir değer girin, gönder düğmesine basın. Denetleyici yönteminiz çağrılmalıdır.


4
Neden POST? Peki ya PUT?
Green

4
"Çalışmıyor" derken neyi kastediyorsunuz? Sorunları kolayca gidermemiz için neden kodunuzu göstermiyorsunuz?
Sumit Badaya

2
Metin kısmını Stringher zamanki gibi alıyorum . Neden benim DTO'mla eşleşmiyor? @PostMapping ( value = "/byImageFile", consumes = { "multipart/form-data" }) public ResponseEntity<?> postMap( @RequestPart ( "imageFile") MultipartFile imageFile, @RequestPart ( "fieldsToExtract") RequestDto requestDto ) Bu durumda postacıdan isteği gönderemiyorum
Arun Gowda

@ArunGowda Sorgunuzu yeni Soru olarak göndermeyi deneyin. Buradaki soru afişinden farklı olduğundan ve verilen cevap OP tarafından burada yayınlanan soru ile ilgilidir.
Sumit Badaya

1
Çözümümü buldum. Bu eşleme olmaz RequestDtootomatik. Onu bir dize olarak aldım, ayrıştırdım Jsonve RequestDtoaçıkça eşledim.
Arun Gowda

113

Kayıp Görsel Kılavuz

Sen gerekir ilk neredeyse-görünmez soluk gri-beyaz açılan bulmak Filesihirli anahtar kilidini olmasıdır hangi Choose Filesdüğme.

Sonra seçtiğiniz POST, ardından seçim Body->form-data, ardından Dosya açılan bulmak ve daha sonra 'Dosya' yı seçin, ancak o zaman düğmeye sihirli görünür 'Dosyalar Seç' olacaktır:

Postacı POST dosyası ayarı - (Metin, Dosya) açılır menüsü vurgulanmış


1
bunun için kullanıcı arayüzünün başlatılmayanlar için görünmez olduğu konusunda haklısınız. Görsel versiyon için teşekkürler!
Vijay

XML gövde yüküm ve ekim varsa ne olur?
tuxErrante

gce'nin cevabı bunu kolayca yapabileceğinizi söylüyor gibi görünüyor? Emin değilim . Çok parçalı mime formatını öğrenerek eki ve XML'yi tek bir belgede nasıl birleştireceğinizi öğrenmeniz gerekebilir. Bu çok karmaşık değil, elle çok parçalı bir mime gövdesi oluşturabilirsiniz.
Chris F Carroll

İki yıl sonra, kullanıcı arayüzü hiç geliştirilmedi.
Sabuncu

47

Belki şu şekilde yapabilirsin:

postman_file_upload_with_json


8
Orada hangi 6 başlığı ayarladınız?
Green

1
Bu çözüm benim için çalışıyor. Herhangi bir başlık geçmedi ve iyi çalışıyor. Teşekkürler. JSON'u geçmek benim için zor kısımdı. :)
Gaurav Sharma

Ha, zekice - bunu yapmak için uç noktamı değiştirdim :) Biraz çirkin ama çok uygun
Chris Koston

Neden bahsettiğini açıklayabilir misin? @ChrisKoston
tlalco

17

Bunun gibi :

görüntü açıklamasını buraya girin

Gövde -> form verisi -> dosya seçin

"Ad" yerine "dosya" yazmalısınız

Ayrıca Body -> raw alanından JSON verilerini gönderebilirsiniz. (Sadece JSON dizesini yapıştırın)


3
aslında bir hizmet için postacıda bazı değerleri iletmem ve dosyalamam gerekiyor
Harikrishnan KN

1
Başlıkları? hangi başlıklar ayarlanmalı?
Green

11
Soru, bu yanıtta burada ele alınmayan json verilerinin de yüklenmesini ister.
Rohit

Bunu yapmanın doğru yolu: stackoverflow.com/questions/21329426/…
dassum

10
  1. Herhangi bir başlık vermeyin.
  2. Json verilerinizi bir .json dosyasına koyun.
  3. İsteğiniz parametre anahtarları için her iki dosyanızı da biri .txt dosyanız, diğeri .json dosyası olarak seçin.

Bu .. Bu aynı zamanda birden çok dosya çok bölümlü yük bir json yük ile birlikte yüklenmek zorunda kullanım durumları için kullanılabilir .. iyi cevaptır
Kiran

JSON verilerinin yanı sıra bir Dosya göndermek istiyorsanız bu en doğru cevaptır. Bir dosyanın seçilmesini ve ardından JSON verilerinin tek bir JSON dize değeri olarak iletilmesini veya değerlerin bölünmesini gösteren örnekler işe yaramıyor (muhtemelen bitiş noktasına bağlı olarak, ancak bunu doğrulayamıyorum). Burada ayrıca bahsediliyor: github.com/postmanlabs/postman-app-support/issues/3331
Anto

8

Form verilerini kullanarak çok parçalı dosya yüklemek ve aynı POST İsteğinde json verilerini (Dto nesnesi) göndermek gibi ihtiyacınız varsa

Denetleyicide dize olarak JSON nesnesini alın ve bu satırı ekleyerek serisini kaldırmasını sağlayın

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

1
Bana kullanılan iki başlığın ne olduğunu söyleyebilir misiniz?
Abhisek Roy

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

Evet işe yaradı. Teşekkürler. Aşağıdaki kodu kullandım ve çalıştım: @PostMapping (value = Constant.API_INITIAL + "/ uploadFile") public UploadFileResponse uploadFile (@RequestParam ("file") MultipartFile dosyası, String jsonFileVo) {FileUploadVo fileUploadVo = null; deneyin {fileUploadVo = new ObjectMapper (). readValue (jsonFileVo, FileUploadVo.class); } catch (İstisna e) {e.printStackTrace (); }
Anand_5050

contactDtoString için İçerik Türünü application / json olarak ayarlayabilirsiniz, bunu her anahtar için yapabilirsiniz
Hritcu Andrei

7

Postacı çok parçalı form veri içerik türü

[SÜTUNLARI GÖSTER] 'den [İçerik Türü]' nü seçin ve ardından "application / json" içerik türünü json metninin parametresine ayarlayın.



6

Birisi json verilerini form-veri biçiminde göndermek isterse, sadece bunun gibi değişkenleri bildirmesi gerekir

Postacı:

Gördüğünüz gibi, açıklama parametresi temel json biçiminde olacaktır, bunun sonucunda:

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

2

İkisini de iletmem gerekiyordu: bir dosya ve bir tam sayı. Ben şu şekilde yaptım:

  1. Yüklemek için bir dosya iletmek gerekiyor: Sumit'in cevabına göre yaptı.

    İstek türü: POST

    Gövde -> form verileri

    KEY başlığı altında, değişkenin adını (arka uç kodumdaki 'dosya') girdim.

    arka uçta:

    file = request.files['file']

    "Dosya" nın yanında "Dosya" veya "Metin" arasında seçim yapmanıza izin veren bir açılır kutu vardır. 'Dosya'yı seçin ve VALUE başlığının altında ' Dosyaları seçin 'göründü. Dosyayı seçmek için bir pencere açan buna tıklandı.

2. bir tamsayı geçirmek için gerekli:

gitti:

parametreler

KEY altına değişken adı (örneğin: id) ve DEĞER altına değeri (örneğin: 1) girildi

arka uçta:

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

Yaradı!


2

Yay dayanağı tarafında aşağıdaki kodu kullanı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();
        }

görüntü açıklamasını buraya girin


2

Her form veri anahtarı için Content-Type'ı ayarlayabilirsiniz, sağda Content-Type sütununu eklemek için bir postman düğmesi vardır ve Controller'ınızın içindeki bir dizeden json ayrıştırmanız gerekmez.


1

Bir olmak için PUTisteği, sadece olarak her şeyi POSTistek ama eklemek _method=> PUTsizin için form-dataparametreler.



0

Oturumu devam ettirmek için çerez kullanıyorsanız, tarayıcıdan postacıya çerezleri paylaşmak için interceptor'ı kullanabilirsiniz .

Ayrıca bir dosya yüklemek için postacıda gövde sekmesinin altındaki form-veri sekmesini kullanabilirsiniz, burada anahtar-değer formatında veri sağlayabilirsiniz ve her anahtar için metin / dosya değer türünü seçebilirsiniz. dosya türünü seçtiğinizde dosyayı yüklemek için seçenek belirdi.


2
500 aldığınız şey için lütfen biraz daha ayrıntı paylaşır mısınız
Sandesh Jain

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.