【问题标题】:Upload a file using Restlet multipart/form-data in java在 java 中使用 Restlet multipart/form-data 上传文件
【发布时间】:2015-10-06 12:27:03
【问题描述】:

所以我现在搜索了很多示例代码,但我发现的唯一内容是服务器端的示例,即接收部分

我想创建一个应用程序,它使用 restlet 上传文件,内容类型:multipart/form-data。所以我需要发送部分

如何为此创建表单?

我尝试了以下方法,但它不起作用:

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

}

使用下面的方法发布Form并接收一个JSON Representation(postJson意思是post,get json back)

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

当一切正常时,接收服务器应该返回一个 JSON 字符串。

Endpoint 实际上不是我的本地主机,而是带有 SendPhoto 方法的 Telegram Bot。在那里,您可以使用 multipart/form-data 将文件作为图像发布

SendPhoto Documentation

我会做错什么?如何使用 restlet 作为 multipart/form-data 上传文件(在我的例子中是图像)?

【问题讨论】:

    标签: java file-upload restlet restlet-2.3.1


    【解决方案1】:

    我对@9​​87654321@ 进行了一些尝试和错误编程并得到了结果。

    要使用 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 方法。

    【讨论】:

      猜你喜欢
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-20
      • 2019-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多