android上传图片到PHP的过程详解

  • Post category:http

下面是“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;
    }
};

以上就是本攻略的全部内容,希望能够对您有所帮助。