Retrofit 2.0 슈퍼 실천 (3), 파일 / 다 중 이미지 업로드 / JSon 문자열 쉽게 구현

글:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 약서 & csdn 동시 획득 기술 문장 아래 위 챗 공중 번 호 를 주목 하 세 요!
앞의 두 자 세 를 통 해 입문 하 다.
  • Retrofit 2.0 초능력 실천, Https 전송 완벽 지원
  • Retrofit 2.0 완벽 동기 화 쿠키 로그 인 면제
  • 본문 은 다음 과 같다.http://blog.csdn.net/sk719887916/article/details/51755427 화이트
    Retrofit 2.0 의 앞 두 편의 기초 입문 과 사례 실천 을 통 해 Retrofit 를 사용 하여 네트워크 에 접근 하 는 방법 을 파악 하고 사용자 정의 header 를 추가 하 는 것 은 SSL 인증서, 기본 디 버 깅 기반, coolkie 동기 화 를 포함 하지만 파일 업로드 가 필요 한 경우 가 많 습 니 다. 오늘 주 제 는 Retrofit 2.0 으로 파일 과 그림 을 업로드 하 는 방법 을 공유 합 니 다.
    Retrofit1. x 로 파일 업로드
    2.0 이전 버 전에 사진 올 리 는 자세 다 들 아 시 잖 아 요.
     public interface ApiManager {
        @Multipart
        @POST("/user/addCarInfo")
        void addCarInfo(@QueryMap Map options, @Part("file") TypedFile file, Callback response);
    
    }
    

    Retrofit 2. X 로 업로드
    Retrofit 2 파일 업로드
    2, 0 을 사용 하면 Typed File 형식 이 민영화 되 었 고 1.9 의 전송 방식 을 계속 사용 할 수 없습니다. 더 이상 상부 에서 호출 할 수 없습니다. MultipartBody. Part 로 대체 할 수 있 습 니 다.
     public interface FileUploadService {  
     @Multipart
     @POST("upload")
     Call upload(@Part("description") RequestBody description,
                              @Part MultipartBody.Part file);
    }
    

    구체 적 인 용법.
    //    RequestBody,       RequestBody
    RequestBody requestFile =
            RequestBody.create(MediaType.parse("multipart/form-data"), file);
    
    // MultipartBody.Part is used to send also the actual file name
    MultipartBody.Part body =
            MultipartBody.Part.createFormData("image", file.getName(), requestFile);
    
    //     
    String descriptionString = "hello,       ";
    RequestBody description =
            RequestBody.create(
                    MediaType.parse("multipart/form-data"), descriptionString);
    
    //     
    Call call = service.upload(description, body);
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call,
                               Response response) {
            Log.v("Upload", "success");
        }
    
        @Override
        public void onFailure(Call call, Throwable t) {
            Log.e("Upload error:", t.getMessage());
        }
    });
    

    }
    사진 한 장 을 상부 에 보고 하 다.
    @Multipart
     @POST("you methd url upload/")
    Call uploadFile(
            @Part("avatar\\\\"; filename=\\\\"avatar.jpg") RequestBody file);
    

    여러 장의 사진 을 상부 에 보고 하 다.
    @POST("upload/")
    Call uploadFiles(@Part("filename") String description,
                                         @Part("pic\\\\"; filename=\\\\"image1.png") RequestBody imgs1,
                                         @Part("pic\\\\"; filename=\\\\"image2.png") RequestBody imgs2,
                                         @Part("pic\\\\"; filename=\\\\"image3.png") RequestBody imgs3,
                                         @Part("pic\\\\"; filename=\\\\"image4.png") RequestBody imgs4);
    

    하면, 만약, 만약...
      @Multipart
    @POST("{url}")
    Observable uploadFiles(
            @Path("url") String url,
            @Part("filename") String description,
            @PartMap() Map maps);
    

    또는:
    @Multipart
    @POST("{url}")
    Observable uploads(
            @Path("url") String url,
            @Part("description") RequestBody description,
            @Part("filekey") MultipartBody.Part file);
    

    그림 과 매개 변 수 를 동시에 보고 하 다.
      @Multipart
    @POST("upload/")
    Call register(
                                       
                                       @QueryMap Map usermaps,
                                       @Part("avatar\\\\"; filename=\\\\"avatar.jpg") RequestBody avatar,
                                       );
    

    이런 방식 은 당신 으로 하여 금 사용자 등록 문 제 를 잘 해결 하 게 합 니 다.사용자 의 모든 정보 포함
    위의 코드 세 션 에 표 시 된 코드 초기 화 (RequestBody 와 description), 파일 업로드 서 비 스 를 어떻게 사용 하 는 지.이미 언급 한 바 와 같이 OkHttp RequestBody 클래스 에서 설명 합 니 다.RequestBody. create () 방법 2 개가 필요 합 니 다.
    설명 을 제외 하고 추가 파일 을 Multipart Body 의 인 스 턴 스 로 포장 해 야 합 니 다.이것 이 바로 당신 이 클 라 이언 트 에서 파일 을 올 리 는 데 적당 한 것 을 사용 해 야 한 다 는 것 입 니 다.또한, createformData 의 uploadFile (Uri fileUri) 방법 과 재 활용 을 추가 할 수 있 습 니 다.
    Content - Type 설정
    설정 한 내용 유형 에 주의 하 십시오.바 텀 OkHttp 클 라 이언 트 를 차단 하고 콘 텐 츠 유형 애플 리 케 이 션 / json 을 변경 하면 서버 가 역 직렬 화 과정 에서 문제 가 발생 할 수 있 습 니 다.사용자 정의 multipart / form - data 가 없 는 지 확인 하 십시오.
    upLoad 그림 도 Content - Type 을 "image / jpg" 형식 으로 구체 적 으로 가리 킬 수 있 습 니 다.
       RequestBody requestFile =
                RequestBody.create(MediaType.parse("image/jpg"), mFile);
    

    그리고 자주 사용 하 는 것:
    JSON 올 리 기
    @POST("/uploadJson")
    Observable uploadjson(
            @Body RequestBody jsonBody);
    

    upLoadJSon 도 Content - Type 을 "application / json" 형식 으로 구체 적 으로 가리 킬 수 있 습 니 다.
    구체 적 으로 저희 RequestBody 를 조립 하면 이렇게 할 수 있 습 니 다.
     RequestBody body= 
                   RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), jsonString);
    

    이어서 이렇게 호출 할 수 있 습 니 다.
    //     
    Call call = service.uploadJson(description, body);
    call.enqueue(new Callback() {
        @Override
        public void onResponse(Call call,
                               Response response) {
            Log.v("Upload", "success");
        }
    
        @Override
        public void onFailure(Call call, Throwable t) {
            Log.e("Upload error:", t.getMessage());
        }
    });
    

    }
    서버 가 어떤 유형의 model 로 돌아 가 는 지 에 대해 개발 자 는 사용자 정의 할 수 있 습 니 다. 예 를 들 어 APi 의 Response Body 를 자신의 javaBean 로 지정 할 수 있 습 니 다. 물론 상부 구축 Callback 할 때 도 Call 이 어야 합 니 다.
    @POST("/uploadJson")
    Observable uploadjson(
            @Body RequestBody jsonBody);
    

    서버 예제 에 파일 업로드
    백 엔 드 항목 이 있다 면 아래 예제 코드 에 의존 할 수 있 습 니 다.간단 한 api 업로드 서버 를 사용 합 니 다.이 밖 에 api 에 인자 전송 요청 을 알려 드 립 니 다. Node. js 를 사용 하기 때 문 입 니 다.
    해 석 된 반전 함수 입 니 다. 우 리 는 모든 필드 를 기록 하여 출력 을 표시 합 니 다.
    method: 'POST', 
     path: '/upload',  
    config: {  
    payload: {
        maxBytes: 209715200,
        output: 'stream',
        parse: false
    },
    handler: function(request, reply) {
        var multiparty = require('multiparty');
        var form = new multiparty.Form();
        form.parse(request.payload, function(err, fields, files) {
            console.log(err);
            console.log(fields);
            console.log(files);
    
            return reply(util.inspect({fields: fields, files: files}));
        });
    }}
    

    안 드 로 이 드 클 라 이언 트 는 반환 형식의 문자열 을 받 았 습 니 다. 업로드 에 성공 한 상태의 리 셋 을 받 을 것 입 니 다.물론 니 가 처리 해도 되 고 안 해도 돼.성공 적 으로 요청 한 출력 단 과 유효 부하 에 대한 분석 을 볼 수 있 습 니 다.첫 번 째 빈 대상.이후 요청 의 일부분 으로 만 필드 를 볼 수 있 습 니 다.이 어 파일 설명, 파일 크기, 파일 닉네임, 저장 경 로 를 받 을 수 있 습 니 다.
    서버 에서 유효한 데 이 터 를 분석 하 는 로그
       Null
      { description: [ 'hello, this is description speaking' ] }
    { picture:
      [ { fieldName: 'picture',
        originalFilename: '20160312_095248.jpg',
        path:      '/var/folders/rq/q_m4_21j3lqf1lw48fqttx_80000gn/T/X_sxX6LDUMBcuUcUGDMBKc2T.jpg',
       headers: [Object],
       size: 39369 } ] }
    

    돌이켜보다
    파일 업 로드 는 최신 프로그램 에서 없어 서 는 안 될 기능 입 니 다. 이 기능 을 응용 프로그램 에 통합 하여 리 모델 링 을 사용 할 수 있 습 니 다.본 고 는 안 드 로 이 드 장치 에서 백 엔 드 서버 에 파일 을 보고 하 는 첫 번 째 절 차 를 안내 합 니 다.
    원본 코드:https://github.com/Tamicer/Novate
    Retrofit 2.0 시리즈
    Retrofit 2.0 시리즈 읽 어 주세요.
  • Retrofit 2.0 (一) 초능력 실천, Https 전송 완벽 지원
  • Retrofit 2.0 (2) 완벽 동기 화 쿠키 로그 인 면제 실현
  • Retrofit 2.0 초 능 실천 (3), 파일 / 사진 업로드 쉽게 실현
  • Retrofit 2.0 초 능 실천 (4), 큰 파일 정지점 다운로드 완료
  • Retrofit 2.0 을 기반 으로 한 아주 좋 은 RetrofitClient 도구 류
  • IOC 를 돌 며 사용자 정의 Retrofit 프레임 워 크 를 맨손으로 실현 하 는 것 을 가르쳐 준다
  • Rxjava 와 Retrofit 가 습득 해 야 할 몇 가지 실 용적 인 기교, 캐 시 문제 와 통 일 된 네트워크 처리 문제
  • Novate: Retrofit 2.0 에 대한 또 한 번 의 완벽 한 개선 강화!(9)
  • 첫 번 째 시간 에 기술 문장 을 얻 으 려 면 위 챗 공중 번 호 를 주목 하 세 요!
    开发者技术前线

    좋은 웹페이지 즐겨찾기