下面是“android上传图片到PHP的过程详解”的完整攻略。
1.准备工作
在将图片上传到php之前,我们需要在项目中引入Volley库,以方便我们进行http请求操作。此外,我们还需要准备一份PHP文件,并在其中编写好用于接收上传图片的代码。
2.代码实现
首先,我们需要在Android中实现选择照片并将其转为字节数组的功能。代码示例如下:
private JSONObject getUploadJSONObject(Bitmap bitmap) {
JSONObject json = new JSONObject();
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteArray = stream.toByteArray();
String imageBinaryString = Base64.encodeToString(byteArray, Base64.DEFAULT);
json.put("file", imageBinaryString);
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
这个方法接受一个bitmap参数,将其转化为字节数组,并使用Base64编码方式将其转为字符串。最后,将转换后的字符串存入JSONObject中。
接着,我们需要构建一个请求,用于与PHP交互。我们选用Volley库,代码实现如下:
StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// code here for success response
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// code here for error response
}
})
{
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("file", jsonObject.toString());
return params;
}
};
代码中,我们使用了StringRequest请求,通过构造函数传入请求地址、成功和失败的回调函数,并重写getParams方法。其中,getParams方法返回一个Map,将JSONObject转换为字符串形式,存入Map中,作为请求参数。
最后,我们启动请求,使用Volley库来进行http请求,代码如下:
RequestQueue requestQueue = Volley.newRequestQueue(getContext());
requestQueue.add(postRequest);
3.PHP代码实现
PHP代码实现较为简单。我们使用$_FILES全局变量来存储上传的文件信息,代码示例如下:
if(isset($_FILES['file'])) {
$file = $_FILES['file'];
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
echo "The file has been uploaded";
} else{
echo "There was an error uploading the file, please try again!";
}
}
PHP代码中,我们首先判断$_FILES全局变量是否存在,如果存在,将文件信息存储在$file变量中。接着,我们确定文件上传后保存的目录和文件名,并使用move_uploaded_file方法,将临时文件移动到指定位置,从而完成上传文件的操作。
4.示例说明
以下是本攻略中的代码示例:
代码示例1:实现选择照片并将其转为字节数组的功能
private JSONObject getUploadJSONObject(Bitmap bitmap) {
JSONObject json = new JSONObject();
try {
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 70, stream);
byte[] byteArray = stream.toByteArray();
String imageBinaryString = Base64.encodeToString(byteArray, Base64.DEFAULT);
json.put("file", imageBinaryString);
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
代码示例2:使用Volley库构建请求
StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// code here for success response
}
}, new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// code here for error response
}
})
{
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String>();
params.put("file", jsonObject.toString());
return params;
}
};
以上就是本攻略的全部内容,希望能够对您有所帮助。