I did this instead for the interface
interface MultipartFormDataService {
@POST("/{uploadPath}")
void multipartFormDataSend(
@EncodedPath("uploadPath") String uploadPath,
@Body MultipartTypedOutput multipartTypedOutput,
Callback<String> cb);
}
Then later when I call it, it looks like this
// creating the Multipart body using retrofit
MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput();
TypedString idParam = new TypedString("[ID Value]")
TypedString bodyParam = new TypedString("[Body text]")
ByteArrayTypedOutput byteMultipartTypedOut = new ByteArrayTypedOutput(bytes)
// add parts
multipartTypedOutput.addPart("id", idParam);
multipartTypedOutput.addPart("body", bodyParam);
multipartTypedOutput.addPart("attachment", extraParamTypedString);
// send
multipartService.multipartFormDataSend(
"[TARGET URL]",
multipartTypedOutput,
aCallback);
My ByteArrayTypedOutput was simple
public class ByteArrayTypedOutput implements TypedOutput {
private MultipartFormMetadata metadata;
private byte[] imageData;
public ByteArrayTypedOutput(MultipartFormMetadata metadata, byte[] imageData)
this.metadata = metadata;
this.imageData = imageData;
}
@Override
public String fileName() {
return metadata.fileName;
}
@Override
public String mimeType() {
return metadata.fileMimeType;
}
@Override
public long length() {
return imageData.length;
}
@Override
public void writeTo(OutputStream outputStream) throws IOException {
outputStream.write(imageData);
}
}