我尝试在客户端使用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');