Multipart Request using Retrofit 1.8.0 not working

前端 未结 3 1029
名媛妹妹
名媛妹妹 2021-01-12 19:25

I have like 4 days, trying to make a Multipart Request using Retrofit 1.8.0 in android with any success. My interface looks something like this

@Multipart
@         


        
3条回答
  •  独厮守ぢ
    2021-01-12 20:18

    I did this instead for the interface

    interface MultipartFormDataService {
        @POST("/{uploadPath}")
        void multipartFormDataSend(
                @EncodedPath("uploadPath") String uploadPath,
                @Body MultipartTypedOutput multipartTypedOutput,
                Callback 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);
        }
    }
    

提交回复
热议问题