Загрузить поток изображений в веб-сервис wcf - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь загрузить изображение с Android в веб-службу WCF, этот запрос должен выглядеть примерно так:

{
      "docRequest": {
        "Password": "x",
        "UserName": "x",
        "page_no": 1,
        "docs": {
                  // the image stream
                }
    }
}

Я использую модификацию 2.4

implementation 'com.squareup.retrofit2:retrofit:2.4.0'
implementation 'com.squareup.retrofit2:converter-gson:2.4.0'

это интерфейс

@Multipart
@POST("saveDoc")
Call<UploadResponse> uploadDoc(@Part ("try") WrapperRequest uploadPhotoRequest);

класс wrapperRequest, содержащий данные

public class WrapperRequest
{

    docRequest docRequest;

    public WrapperRequest(WrapperRequest.docRequest docRequest)
    {
        this.docRequest = docRequest;
    }

    public static class docRequest
    {
        RequestBody docs;
        String UserName, Password;
        int page_no;

        public docRequest(RequestBody docs, String UserName, String Password, int page_no)
        {
            this.docs = docs;
            this.UserName = UserName;
            this.Password = Password;
            this.page_no = page_no;

        }

    }
}

Где я делаю запрос

RequestBody docs = new MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("image", file.getName(),
                        RequestBody.create(MediaType.parse("image/*"), file)).build();

        WrapperRequest.docRequest docRequest = new WrapperRequest.docRequest(docs, sessionManager.getUsername(), sessionManager.getPassword(), page_no);
        WrapperRequest wrapperRequest = new WrapperRequest(docRequest);

        Call<UploadResponse> call = client.uploadDoc(wrapperRequest);

        call.enqueue(new Callback<UploadResponse>() {
            @Override
            public void onResponse(Call<UploadResponse> call, Response<UploadResponse> response)
            {
                progressDialog.dismiss();
            }

            @Override
            public void onFailure(Call<UploadResponse> call, Throwable t)
            {
                progressDialog.dismiss();
                ShowAlertDialog(t.getMessage());
                Log.v("UploadResponse", t.getMessage());
            }
        });

Это отправленный запрос

{
  "docRequest": {
    "Password": "x",
    "UserName": "x",
    "docs": {
      "boundary": {
        "data": [
          102,
          98,
          54,
          102,
          99,
          57,
          56,
          48,
          45,
          48,
          49,
          97,
          101,
          45,
          52,
          57,
          98,
          55,
          45,
          97,
          55,
          51,
          49,
          45,
          53,
          99,
          50,
          102,
          56,
          99,
          53,
          100,
          49,
          48,
          54,
          97
        ]
      },
      "contentLength": -1,
      "contentType": {
        "mediaType": "multipart/form-data; boundary=fb6fc980-01ae-49b7-a731-5c2f8c5d106a",
        "subtype": "form-data",
        "type": "multipart"
      },
      "originalType": {
        "mediaType": "multipart/form-data",
        "subtype": "form-data",
        "type": "multipart"
      },
      "parts": [
        {
          "headers": {
            "namesAndValues": [
              "Content-Disposition",
              "form-data; name=\"image\"; filename=\"Capture.PNG\""
            ]
          }
        }
      ]
    },
    "page_no": 2
  }
}

Очевидно, что это неверный запрос, который не соответствует ожидаемому запросу веб-службы. Мой вопросКак я могу отправить поток изображения только внутри "документы" без всех там ненужных данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...