English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Usabilidade do Okhttp no Android3Implementação de Envio de Múltiplas Imagens com Parâmetros Simultaneamente

Antes, o upload de imagens era feito diretamente, convertendo a imagem em um fluxo de entrada e fornecendo ao servidor, sem usar uma framework para transmitir a imagem.

Recentemente, ao fazer um projeto, pensei em mudar o método de upload de imagens.

Até onde o Android desenvolveu, Okhttp está se tornando cada vez mais importante, então, desta vez, eu escolhi usar Okhttp para upload de imagens.

Okhttp já foi atualizado para Okhttp3Versão, a utilização é um pouco diferente em comparação com a anterior. Encontrei muitos materiais na internet,

E com a ajuda dos colegas de backend java, finalmente conseguimos upload de várias imagens, além de passar alguns pares de chave-valor.

Aqui está a encapsulação do processo:

private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
/**
   * Upload de várias imagens e parâmetros
   * @param reqUrl Endereço da URL
   * @param params Parâmetros
   * @param pic_key Palavra-chave para upload de imagem
   * @param paths Caminho da imagem
   */
  public Observable<String> sendMultipart(String reqUrl,Map<String, String> params,String pic_key, List<File> files){
    return Observable.create(new Observable.OnSubscribe<String>(){
      @Override
      public void call(Subscriber<? super String> subscriber) {
        MultipartBody.Builder multipartBodyBuilder = new MultipartBody.Builder();
        multipartBodyBuilder.setType(MultipartBody.FORM);
        //Percorrer todos os parâmetros do map para o builder
        if (params != null){
          for (String key : params.keySet()) {
            multipartBodyBuilder.addFormDataPart(key, params.get(key));
          }
        }
        //Percorrer todos os caminhos absolutos de imagens em paths para o builder, e acordar chave como "upload" como chave aceita pelo servidor para múltiplas imagens
        if (files != null){
          for (File file : files) {
            multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file));
          }
        }
        //Construir corpo da solicitação
        RequestBody requestBody = multipartBodyBuilder.build();
        Request.Builder RequestBuilder = new Request.Builder();
        RequestBuilder.url(reqUrl);// Adicionar endereço da URL
        RequestBuilder.post(requestBody);
        Request request = RequestBuilder.build();
        mOkHttpClient.newCall(request).enqueue(new Callback() {
          @Override
          public void onFailure(Call call, IOException e) {
            subscriber.onError(e);
            subscriber.onCompleted();
            call.cancel();
          }
          @Override
          public void onResponse(Call call, Response response) throws IOException {
            String str = response.body().string();
            subscriber.onNext(str);
            subscriber.onCompleted();
            call.cancel();
          }
        });
      }
    });
  } 

Na chamada na interface de UI:

OkHttp3Utils.getInstance().sendMultipart(Constants.URL.URL_ADD_NOTICE, mMap, "appendix", mImageList)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribeOn(Schedulers.newThread())
        .subscribe(new Subscriber<String>() {
          @Override
          public void onCompleted() {
          }
          @Override
          public void onError(Throwable throwable) {
            LogUtil.i(TAG, "throwable:") + throwable.toString());
          }
          @Override
          public void onNext(String s) {
            LogUtil.i(TAG, "s:") + s);
          }
        }); 

Durante o processo de depuração, uma vez que escrevi multipartBodyBuilder.addFormDataPart(pic_key, file.getName(), RequestBody.create(MEDIA_TYPE_PNG, file)); como multipartBodyBuilder.addFormDataPart(pic_key, null, RequestBody.create(MEDIA_TYPE_PNG, file));, o servidor não pôde obter a imagem de maneira convencional (apesar de poder ver os dados da imagem durante a depuração de breakpoints), isso deve ser notado.

Isso é tudo o que há no artigo. Espero que ajude na sua aprendizagem e que você apoie fortemente o tutorial de clamor.

Declaração: o conteúdo deste artigo é extraído da Internet, pertence ao respectivo detentor dos direitos autorais, fornecido voluntariamente pelos usuários da Internet e carregado por eles mesmos. Este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade por questões legais relacionadas. Se você encontrar conteúdo suspeito de violação de direitos autorais, seja bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas relevantes. Caso seja confirmado, o site deletará imediatamente o conteúdo suspeito de violação de direitos autorais.)

Você também pode gostar