我如何解析图像从android到api服务器


How can i parse image from android to api server

我很难将文本与图像一起解析。我使用的是精简rest API,下面是我的代码:

$app->post('/updateprofile', function () use ($app) {
    $json = $app->request->getBody();
    $data = json_decode($json, true);
    $id = $data["id"];
    $influencer_id = $data["influencer_id"];
    $first_name = $data["first_name"];

我的问题是,如果我想包括一个文件是由用户在客户端上传,这是一个android设备,我怎么能解析图像,并把它放在一个变量?

如果可能的话,你应该使用multipart/form-data来提交而不是json编码的数据,这样你就可以直接访问$_FILES。如果不可能,或者你想继续使用json,你可以发送base64编码的图像作为json的一部分,并在接收时像这样解码:

function base64ToImg($base64_string, $filename) {
    $f = fopen($filename, "wb"); 
    $data = explode(',', $base64_string);
    fwrite($f, base64_decode($data[1])); 
    fclose($f); 
    return $filename; 
}

base64ToImg($data["image"], "path/to/img");

编辑

发送文件到服务器的通常方式是在html表单中设置enctype="multipart/form-data";这样,您的表单将看起来像

<form name = 'formName' enctype="multipart/form-data">
    <input name = 'data1' type = 'text'>
    <input name = 'file1' type = 'file'>
</form>

在您的服务器中,您将在$_FILES和$_POST中接收信息:

<?php
   $data1  = $_POST["data1"];
   $file = $_FILES["file1"];
   move_uploaded_file($file["tmp_name"], "path/to/img");
?>

既然你说这是一个android设备,我会补充说,表单的东西可能不会有帮助,如果你正在开发的是一个android应用程序,你将不得不做这样的事情(或多或少,它已经很长很长一段时间以来,我的最后一个android应用程序)。

 httpClient = new DefaultHttpClient();
 post = new HttpPost(yourUrl);
 post.setHeader("Content-type", "multipart/form-data");
 MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
 multipartEntity.addPart("data1", new StringBody(data1));
 multipartEntity.addPart("file1", new FileBody(file1));
 post.setEntity(multipartEntity);
 response = httpClient.execute(httpPost);