图像上传不适用于使用$ _FILES和move_uploaded_file的Volley请求到php

时间:2015-12-01 22:50:49

标签: php android android-volley

我很难将图像数据存储到数据库中,我尝试了两种方法,第一种方法正在工作,但第二种方法无效,我实际上想要使用。

工作代码:

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){

    $image = $_POST['image'];
    $name = $_POST['name'];

    require_once('dbConnect.php');

    $id = 86;

    $path = "uploads/$id.jpg";

    $sql = "UPDATE user SET imagePath = '$imagename' where id = '$id'";

    if(mysqli_query($con,$sql)){
        file_put_contents($path,base64_decode($image));
        echo "Successfully Uploaded";
     }

    mysqli_close($con);
}else{
    echo "Error";
}

但是以下代码不起作用。我使用相同的逻辑,但这次使用$_FILESmove_uploaded_file。我得到点“echofully Uploaded”,但图像没有保存到uploads文件夹中。

<?php

    if($_SERVER['REQUEST_METHOD']=='POST'){

        $name=$_FILES["image"]["name"];
        $temp_name=$_FILES["image"]["tmp_name"];

        require_once('dbConnect.php');

        $id = 96;

        $imagename=$id."_".time().$file_name;           
        $path = "uploads/".$imagename.".png";

        $sql = "UPDATE user SET imagePath = '$imagename' where id = '$id'";
        $uploads_dir = '/uploads';
        if(mysqli_query($con,$sql)){
            move_uploaded_file($temp_name, "$uploads_dir/$name");
            echo "Successfully Uploaded";
        }

        mysqli_close($con);
    }else{
        echo "Error";
    }

非常感谢任何帮助。

更新:这是从android调用的方式:

protected Map<String, String> getParams() throws AuthFailureError {
    //Converting Bitmap to String
    String image = getStringImage(((BitmapDrawable)imageView.getDrawable()).getBitmap());

    //Getting Image Name
    String name = editTextName.getText().toString().trim();

    //Creating parameters
    Map<String,String> params = new Hashtable<String, String>();

    //Adding parameters
    params.put(KEY_IMAGE, image);
    params.put(KEY_NAME, name);

    //returning parameters
    return params;
}

更新2:位图图像编码为Base64,如下所示。

public String getStringImage(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }

参数中的KEY_NAME相等"name"

1 个答案:

答案 0 :(得分:0)

如果显示“Successfully Uploaded”连接已完成且更新,但问题应该在这里

move_uploaded_file($tmp_name, "$uploads_dir/$name");

你可能在输入中没有称为“名字”,我的意思是<input type='file' name='xxxxx'/> 你应该试试

$name=$_FILES["image"]["xxxxx"];