如何使用Mysqli(PHP)在Mysql中插入Ajax传递的图像作为Blob



我尝试在客户端使用ajax上传图像,在服务器端使用PHP。我面临的问题是,我无法使用PHP将Mysql数据库表中的图像保存为blob。我无法定义图像的接收功能。

我需要关于如何定义接收函数和在数据库列中保存blob映像的帮助
我是不是在下面的PHP代码中遗漏了什么??

Java脚本:

    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript">
    $(document).ready(function (e) {
        $("#uploadForm").on('submit',(function(e) {
            e.preventDefault();
            $.ajax({
                url: "upload.php",
                type: "POST",
                data:  new FormData(this),
                contentType: false,
                cache: false,
                processData:false,
                success: function(data)
                {
                $("#targetLayer").html(data);
                },
                error: function() 
                {
                }           
           });
        }));
    });
    </script>

HTML:

    <form id="uploadForm" action="" method="post">
    <div id="uploadFormLayer">
    <label>Upload Image File:</label><br/>
    <input name="userImage" type="file" class="inputFile" />
    <input type="submit" value="Submit" class="btnSubmit" />
    </form>

PHP:

$db = mysqli_connect("xxxx","xxx","xxx","xxx"); 
$image = addslashes(is_uploaded_file($_FILES['userImage']['tmp_name']));
    $query = "INSERT INTO images (id,image) VALUES('','$image')";  
    $qry = mysqli_query($db, $query);

试试这个。。。

file_get_contents((是将文件内容读入字符串的首选方法。如果操作系统支持,它将使用内存映射技术来提高性能。

在表单中添加"enctype="multipart/form-data">

<form id="uploadForm" action="" method="post" enctype="multipart/form-data">
 $query = "INSERT INTO images (id,image) VALUES('','" . mysql_escape_string(file_get_contents($image)) . "')";  
// Detect if POST
if($_SERVER["REQUEST_METHOD"] == "POST"){
  // Check $_FILES array
  if(isset($_FILES["inputFile"])){
    // Find location of uploaded file
    $tmpName = $_FILES["inputFile"]["tmp_name"];
    // Read data
    $fileHandle = fopen($tmpName, "r");
    $image = fread($fileHandle, filesize($tmpName));
    fclose($fileHandle);
    // Run query
    $db = mysqli_connect("xxxx","xxx","xxx","xxx"); 
    $query = "INSERT INTO images (id,image) VALUES('','$image')";  
    $qry = mysqli_query($db, $query);
  }
}

请记住在文件大小和类型方面添加您自己的安全性。这是PHP文件上传文档。

此外,也不确定为什么要将空字符串传递到表中的id列中。如果该字段具有auto_increment(例如SERIAL数据类型(,那么您可以在SQL:中将该字段留空

INSERT INTO images (image) VALUES('$image');

最新更新