我很难将文本与图像一起解析。我使用的是精简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);