2017-05-02 19 views
0

私は境界で分割されたmultipart/form-data POSTリクエストを扱っています。マルチパート/フォームデータ安らかなリクエスト

POST .... HTTP/1.1 
. 
. 
. 
---boundary123 
Content-type:application/octet-stream 
content-Disposition: form-data filenale="payload.txt" name="someuniquename" 
[paylaod content](this is in xml format) 
---boundary123 
content-type:application/json 
content-Disposition:form-data name="someuniquname" 
{ID:"999"} 
---boundary123 

このマルチパートリクエストはどのように処理できますか?また、Spring4とRESTを使用してPOSTリクエストを行う前に、データを検証する必要があります。

答えて

1

あなたは以下のコードに従ってください。マルチパートリクエスト)Jersey2で

import org.springframework.web.multipart.MultipartHttpServletRequest;  
@RequestMapping(value = "/your_webservice_path", method = RequestMethod.POST, consumes = "multipart/form-data") 
public Void myController(MultipartHttpServletRequest request) throws Exception 
{ 
Iterator<String> iterator = request.getFileNames(); 
while (iterator.hasNext()) {  
     String str=iterator.next().toString(); 
     try{ 
     //extract the file from request 
     } 
     catch(Exception ex){ 
      logger.error("Error while parsing the Payload ro metadata from request", ex); 
     } 
    } 
} 

import org.glassfish.jersey.media.multipart.MultiPart; 
@POST 
@Consumes({MediaType.MULTIPART_FORM_DATA}) 
    @Path("/your_webservice_path") 
    public void myController(MultiPart request) throws Exception { 
    //use request .getBodyParts() for extracting files from Multipart request 
} 
+0

JSON形式(POSTの一番下の行)のIDを検証するにはどうすればよいのですか?また、ペイロードの内容をすべてString形式にしたいのですか? – phalco

+0

上記のリクエストフォーマットは、Array(つまり、MultipartFile []ファイル)を維持する必要があるのか​​、またはMultipartFileファイルが機能するのかの2つの部分があります。 – phalco

+0

こんにちは。これは私のために働いています。 – phalco

0
@RequestMapping(value = "/upload", 
    method = RequestMethod.POST, 
    consumes = MediaType.MULTIPART_FORM_DATA_VALUE, 
    produces = MediaType.APPLICATION_JSON_VALUE) 
public @ResponseBody String upload(
    @RequestParam("file") final MultipartFile file, 
    @RequestParam("name") final String name) { 
     // your work here using the file. you can use file.getBytes() 
     // or get an input stream from file using file.getInputStream() 
     // and save it. 
     return "{\"status\" : \"success\"}"; 
    } 

file引数にファイルをアップロードし、name引数にStringパラメータ名を取得します。これは私が春4を(これはあなたがファイル名または総無について知らない場合で使用してマルチパートリクエストを処理し方法です

import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.RequestParam; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.multipart.MultipartFile; 
@Controller 
public class FileUploadController { 
    @RequestMapping(value="/singleUpload") 
    public String singleUpload(){ 
     return "singleUpload"; 
    } 
    @RequestMapping(value="/singleSave", method=RequestMethod.POST) 
    public @ResponseBody String singleSave(@RequestParam("file") MultipartFile file, @RequestParam("desc") String desc){ 
     System.out.println("File Description:"+desc); 
     String fileName = null; 
     if (!file.isEmpty()) { 
      try { 
       fileName = file.getOriginalFilename(); 
       byte[] bytes = file.getBytes(); 
       BufferedOutputStream buffStream = 
         new BufferedOutputStream(new FileOutputStream(new File("F:/cp/" + fileName))); 
       buffStream.write(bytes); 
       buffStream.close(); 
       return "You have successfully uploaded " + fileName; 
      } catch (Exception e) { 
       return "You failed to upload " + fileName + ": " + e.getMessage(); 
      } 
     } else { 
      return "Unable to upload. File is empty."; 
     } 
    } 
    @RequestMapping(value="/multipleUpload") 
    public String multiUpload(){ 
     return "multipleUpload"; 
    } 
    @RequestMapping(value="/multipleSave", method=RequestMethod.POST) 
    public @ResponseBody String multipleSave(@RequestParam("file") MultipartFile[] files){ 
     String fileName = null; 
     String msg = ""; 
     if (files != null && files.length >0) { 
      for(int i =0 ;i< files.length; i++){ 
       try { 
        fileName = files[i].getOriginalFilename(); 
        byte[] bytes = files[i].getBytes(); 
        BufferedOutputStream buffStream = 
          new BufferedOutputStream(new FileOutputStream(new File("F:/cp/" + fileName))); 
        buffStream.write(bytes); 
        buffStream.close(); 
        msg += "You have successfully uploaded " + fileName +"<br/>"; 
       } catch (Exception e) { 
        return "You failed to upload " + fileName + ": " + e.getMessage() +"<br/>"; 
       } 
      } 
      return msg; 
     } else { 
      return "Unable to upload. File is empty."; 
     } 
    } 
} 
+0

私はJSON形式であるID POST中(ボトムライン)を検証することができますどのようにすべてのペイロードの内容をString形式にしたいですか? – phalco

+0

上記の方法は、2つの部分である要求を処理するか、同じものに対して配列/リスト(MultipartFileファイル[])を維持する必要がありますか? – phalco

+0

複数のファイルを受信したい場合は、配列(Multipart []ファイル)を使用する必要があります。 –

0

ファイルの中で:

関連する問題