У меня есть метод API конечных точек Google Cloud следующим образом.
@ApiMethod(name = "setImage", httpMethod = ApiMethod.HttpMethod.POST)
public void setImage(HttpServletRequest httpRequest,
com.google.appengine.api.users.User appEngineUser,
@Named("image") String image)
throws IOException, OAuthRequestException, ForbiddenException,
com.google.api.server.spi.response.NotFoundException {
// Write the image text to a pojo and save the pojo in the datastore.
}
Я генерирую клиентские библиотеки для iOS и Android из этого API. В обоих мобильных приложениях я использую камеру, чтобы сделать снимок, при необходимости передискретизирую растровое изображение с камеры, сжимаю его в JPEG и кодирую в виде строки, используя схему URI данных.
На iOS все это работает просто отлично. В итоге я загружаю около 436 тысяч символов. Однако на Android я получаю HTTP-ответ «413 (Request Entity Too Large)» с сервера. Это происходит, даже если я передискретизирую изображение вплоть до точки, когда я отправляю только около 39 КБ для JPEG.
Почему? Трассировка стека для Android такова.
com.google.api.client.googleapis.json.GoogleJsonResponseException: 413 Request Entity Too Large
at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
08-24 15:39:26.046 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
08-24 15:39:26.046 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
08-24 15:39:26.046 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at cc.biketracker.android.task.SetDeviceBikeImageTask.doInBackground(SetDeviceBikeImageTask.java:45)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at cc.biketracker.android.task.SetDeviceBikeImageTask.doInBackground(SetDeviceBikeImageTask.java:16)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
08-24 15:39:26.047 26980-26980/cc.biketracker.android W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
413 Request Entity Too Large "The size of serialized JSON representation of the pipeline exceeds the allowable limit" "Failed to create a workflow job: Invalid JSON payload received" "Failed to create a workflow job: Request payload exceeds the allowable limit"
- person BNK   schedule 24.08.2015