改造1,使用自定义键发送多部分表单数据

时间:2017-10-19 12:44:08

标签: android retrofit multipart

我使用的是API,这是我无法控制的,最近加入了一个使用Retrofit1的开发团队。

我无法以所需格式向服务器发送请求,因为服务器需要以下列格式的多部分表单数据Body:

Uniqueidentifier:FileName.jpg:ReroutServerIP:Base64EncodedDocString.

为了完成这项任务,我尝试了很多不同的技术,但我找不到任何有效的方法。服务器告诉我不支持消息格式。这是我当前的代码(删除了url)。请有人帮忙吗?

@POST("URL")
public Response post_SendData(@Header("Content-Type") String ContentType, @Body String body);

为了达到理想的效果,我可以使用没有标题的邮递员,并使用form-data post方法从我的系统发布文件。在工作邮递员帖子中,Key是上面提到的格式化字符串,值是从我的桌面选择的文件。请参阅下面的邮递员(编辑删除网址)。

Postman

非常感谢你们。

1 个答案:

答案 0 :(得分:0)

如果要将文件发送到服务器:

fn decode(&mut self, buf: &mut BytesMut) -> Result {

    if !self.initialized {
        println!(
            "new connection from {:?} to {:?}",
            self.peer_addr,
            self.local_addr
        );

        self.requests.push(SmtpCommand::Connect {
            local_addr: self.local_addr,
            peer_addr: self.peer_addr,
        });

        self.initialized = true;
    }
    //... snip
    match self.requests.is_empty() {
        true => Ok(None),
        false => Ok(Some(self.requests.remove(0))),
    }
}

这是接口SendMediaApiInterface:

  public void uploadPictureRetrofit(File file, Callback<YourObject> response) {


        // this will build full path of API url where we want to send data.
        RestAdapter restAdapter = new RestAdapter
                .Builder()
                .setEndpoint(YOUR_BASE_URL)
                .setConverter(new SimpleXMLConverter()) // if the response is an xml
                .setLogLevel(RestAdapter.LogLevel.FULL)
                .build();

        // SubmitAPI is name of our interface which will send data to server.
        SendMediaApiInterface api = restAdapter.
                create(SendMediaApiInterface.class);
        TypedFile typedFile = new TypedFile(MULTIPART_FORM_DATA, file);

        api.sendImage(typedFile, response);
    }