【问题标题】:Image upload does not work with Volley request to php using $_FILES and move_uploaded_file图片上传不适用于使用 $_FILES 和 move_uploaded_file 对 php 的 Volley 请求
【发布时间】:2015-12-01 22:50:49
【问题描述】:

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

工作代码:

<?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。我明白了 echo "Successfully Uploaded" 但图片没有保存到上传文件夹中。

<?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;
    }

params 中的KEY_NAME 等于"name"

【问题讨论】:

  • 您确定 工作代码 确实有效。我敢打赌它不会。
  • @RiggsFolly:我再次测试,我确信第一个代码有效。
  • 然后显示激活 PHP 的表单的 HTML
  • @RiggsFolly:我添加了填充要发布的参数的 android (java) 代码。我使用 Volley 请求。

标签: php android android-volley


【解决方案1】:

如果显示“已成功上传”,则表示连接已完成并更新,但问题应该出在此处

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

您可能没有在输入中调用“名称”,我的意思是这里&lt;input type='file' name='xxxxx'/&gt; 你应该试试

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

【讨论】:

  • 您可能对方法调用是正确的:move_uploaded_file,另一方面,参数中的KEY_NAME 等于"name"
猜你喜欢
  • 2021-08-05
  • 2018-06-16
  • 2016-11-03
  • 2016-11-08
  • 2012-08-02
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多