Ion Android отправляет multipart / form-data

Я пытаюсь загрузить изображение на свой сервер по коду ниже.

button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Ion.with(getContext())
.load("postAddress/account/upload/image")
.setMultipartParameter("userPhoto", "xx")
.setMultipartFile("upload", "image/jpeg", new File("/storage/emulated/0/Download/images.jpeg"))
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception e, JsonObject result) {
e.printStackTrace();

}
});
}
});

Тем не менее, я получаю эту ошибку.

10-26 17:58:51.864 19292-19292/tr.example W/System.err: com.google.gson.JsonParseException: unable to parse json
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.ion.gson.GsonParser$1.transform(GsonParser.java:55)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.ion.gson.GsonParser$1.transform(GsonParser.java:41)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.future.TransformFuture.onCompleted(TransformFuture.java:14)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.future.SimpleFuture.handleCallbackUnlocked(SimpleFuture.java:107)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:141)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.future.SimpleFuture.setComplete(SimpleFuture.java:128)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.parser.ByteBufferListParser$3.onCompleted(ByteBufferListParser.java:43)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.DataEmitterBase.report(DataEmitterBase.java:16)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.http.AsyncHttpResponseImpl.report(AsyncHttpResponseImpl.java:92)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.http.AsyncHttpClient$4.report(AsyncHttpClient.java:424)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.FilteredDataEmitter$1.onCompleted(FilteredDataEmitter.java:24)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.DataEmitterBase.report(DataEmitterBase.java:16)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.http.filter.ContentLengthFilter.report(ContentLengthFilter.java:16)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.http.filter.ContentLengthFilter.onDataAvailable(ContentLengthFilter.java:39)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.Util.emitAllData(Util.java:23)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.AsyncNetworkSocket.onReadable(AsyncNetworkSocket.java:152)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:821)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:658)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.AsyncServer.access$800(AsyncServer.java:44)
10-26 17:58:51.864 19292-19292/tr.example W/System.err:     at com.koushikdutta.async.AsyncServer$14.run(AsyncServer.java:600)

Похоже, он не отправляет данные на мой сервер.

Я использую PHP Slim Framework на стороне сервера

Вот код:

use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

require '../vendor/autoload.php';
$app = new \Slim\App;
$container = $app->getContainer();
$container['upload_directory'] = __DIR__ . '/uploads';

$app->post('/account/upload/image', function (Request $request, Response $response) {
$uploadedFiles = $request->getUploadedFiles();
$directory = $this->get('upload_directory');

$uploadedFile = $uploadedFiles['userPhoto'];
if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
$filename = moveUploadedFile($directory, $uploadedFile);
$response->write('uploaded ' . $filename . '<br/>');
}});$app->run();

?>

Реализация на стороне сервера является примером кода multipart / form-data, предоставляемого slim framework.

0

Решение

Ваши php коды кажутся не ответными, как JSON.
Но ваш код Android ожидает JSON. Это может вызвать исключение при синтаксическом анализе.

Так что если вы хотите разрешить это на стороне Android, измените код asJsongObject() в asString(),

Ion.with(getContext())
.....
.asJsonObject()   //<-- before
.setCallback(new FutureCallback<JsonObject>() {

=>
Ion.with(getContext())
...
.asString()  //<-- after
.setCallback(...)
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]