2015-10-06 98 views
2

所以我現在搜索了很多樣本​​代碼,但是我發現的唯一的東西是服務器端的例子,這意味着接收部分在java中使用Restlet multipart/form-data上傳文件

我想創建一個應用程序,它使用restlet上傳文件,內容類型爲:multipart/form-data。所以我需要發送部分

如何爲此創建表單?

我想什麼是下面的,但它不工作:使用下面的方法來發布表單和接收JSON表示(postJson意後,讓回JSON)

public Optional<JsonRepresentation> postJson(String url, Object sendObject,MediaType mediaType,Optional<Collection<? extends Header>> headers){ 
    //build resource 
    ClientResource resource = new ClientResource(url); 

    //build request with headers 
    Request request = new Request(Method.POST,url); 

    headers.ifPresent(col->{ 
     request.getHeaders().addAll(col); 
    }); 

    //set request 
    resource.setRequest(request); 

    //get response 
    resource.post(sendObject,mediaType); 
    Representation responseEntity = resource.getResponseEntity(); 

    System.out.println(responseEntity.toString()); 

    try { 
     //get json representation 
     JsonRepresentation json = new JsonRepresentation(responseEntity); 
     return Optional.of(json); 
    } catch (Exception e) { 
    } 

    return Optional.empty(); 
} 

public void UploadFile(File f){ 
    Form fileForm = new Form(); 
    fileForm.add(Disposition.NAME_FILENAME, "test.jpg"); 
    Disposition disposition = new Disposition(Disposition.TYPE_INLINE, fileForm); 
    FileRepresentation entity = new FileRepresentation(f, MediaType.IMAGE_ALL); 
    entity.setDisposition(disposition); 

    FormData fd = new FormData("photo", entity);   
    FormDataSet fds = new FormDataSet(); 
    fds.setMultipart(true); 
    fds.setMediaType(MediaType.MULTIPART_FORM_DATA); 
    fds.getEntries().add(fd); 

    String url = "http://localhost/uploadFile"; 
    Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty()); 

} 

當一切正常時,接收服務器應該返回一個JSON字符串。

Endpoint實際上不是我的本地主機,而是一個帶有SendPhoto方法的Telegram Bot。在那裏,你可以使用的multipart/form-data的

SendPhoto Documentation

我能做什麼錯發佈文件作爲圖像?如何使用restlet作爲多部分/表單數據上傳文件(在我的情況下是圖像)?

回答

3

我做了一些嘗試和錯誤編程與FormDataSet並得到了結果。

要使用你的Restlet做到以下幾點上傳文件(在這種情況下圖):

FileRepresentation entity = new FileRepresentation(file, mediaType); //create the fileRepresentation 

    FormDataSet fds = new FormDataSet(); //create the FormDataSet 
    FormData fd = new FormData(key, entity); //create the Formdata using a key and a value (file)  
    fds.getEntries().add(fd); //add the form data to the set 
    fds.setMultipart(true); //set the multipart value to true 

    String url = "http://localhost/uploadPhoto"; 
    Optional<JsonRepresentation> opJrep = m_RestClient.postJson(url,fds,MediaType.MULTIPART_FORM_DATA, Optional.empty()); 

本例使用的問題中所描述的相同postJson方法。