【发布时间】:2017-02-15 23:28:27
【问题描述】:
我正在尝试编写代码以使用 php 将图像从 android 应用程序上传到服务器。我正在尝试通过将其转换为 Base64 并将其作为字符串发送
这是java代码:
public class uploadImage extends AsyncTask< String, String, String>{
Bitmap _image;
uploadImage(Bitmap image){
_image = image;
}
@Override
protected String doInBackground(String... params) {
HttpURLConnection con = null;
BufferedOutputStream os= null;
try {
URL url = new URL("URL_TO_SERVER");
con = (HttpURLConnection) url.openConnection();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
_image.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] byte_arr = byteArrayOutputStream.toByteArray();
String _imageEncoded = Base64.encodeToString(byte_arr, Base64.DEFAULT);
JSONObject jsonObject = new JSONObject();
jsonObject.put("imageEncoded", _imageEncoded);
String message = jsonObject.toString();
con.setDoOutput(true);
con.setRequestProperty("Content-Type", "application/json;charset=utf-8");
con.setRequestProperty("X-Requested-With", "XMLHttpRequest");
con.connect();
os = new BufferedOutputStream(con.getOutputStream());
os.write(message.getBytes());
os.flush();
return "";
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
finally {
if (con != null)
con.disconnect();
if (os != null)
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
}
}//uploadImage
这是php代码:
<?php
$json = file_get_contents('php://input');
$obj = json_decode($json);
$imageEncoded = $obj->{"imageEncoded"}
$image = base64_decode("$imageEncoded");
$alterName = rand();
$target= $_SERVER['DOCUMENT_ROOT']."/imagenes/";
$new_img_path =$target.$alterName.".jpg";
file_put_contents( $new_img_path, $image );?>
由于某种原因它不起作用,有人可以告诉我我的错误是什么吗?或指导我采用更好的方法。
【问题讨论】:
-
你可以使用 multipart 上传图片。
-
但这不会阻止我以 JSON 格式发送数据吗?或者你也建议改变它?
-
用日志发布 logcat
标签: php android http image-uploading