问题陈述:我使用Swift& amp;的POST请求在MYSQL数据库中上传图像PHP。我能够在数据库中插入所选图像。但无法显示它。
MYSQL表格格式:
现在我将这些图像从数据库显示到我的localhost。这给我的结果如下......
Swift文件:
@IBAction func uploadOnServer(sender: AnyObject)
{
if Description.text == "" || imageView.image == nil
{
}
else
{
let img:UIImage = imageView.image!
let request = NSMutableURLRequest(URL:NSURL(string: "http://localhost/RESTAPI/UploadImage.php")!)
request.HTTPMethod = "POST"
let postString = "img=\(img)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
let task = NSURLSession.sharedSession().dataTaskWithRequest(request)
{
data, response, error in
print("response =\(response)")
if error != nil
{
print("error=\(error)")
return
}
}
task.resume()
Description.text = ""
imageView.image = nil
}
}
PHP文件:
<?php
$host = "localhost";
$username = "scott";
$password = "tiger";
$dbname = "mydb";
$link = mysqli_connect($host, $username, $password, $dbname);
$arr = array();
if($link == true)
{
//Displaying images from mysql
$select_image="select * from images";// where id=1";
$var=mysqli_query($link,$select_image);
echo "<table>";
while($row=mysqli_fetch_array($var))
{
//$desc = $row["Description"];
$img = $row['image'];
echo "<tr>";//<td><b>$desc</b></td>";
echo "<td><img src = '$img' width = 100 height = 100></td></tr>";
}
}
else
{
die("ERROR: Could not connect. " . mysqli_connect_error());
}
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$img = $_REQUEST['img'];
$sql1 = "INSERT INTO images (image) VALUES ('$img')";
if(mysqli_query($link, $sql1))
{
echo "Image added successfully.";
}
else
{
echo "ERROR: Could not able to execute $sql1.mysqli_error($link)";
}
}
mysqli_close($link);
?>
答案 0 :(得分:1)
从用户那里获取图片
请参阅http://php.net/manual/en/reserved.variables.files.php和http://php.net/manual/en/features.file-upload.php以及朋友,了解如何使用$_FILES
接收上传的数据。
将图像放入变量后,比如说$jpg
,不要使用任何文本编码/解码功能;它只会破坏事物。下面的不同方法将说明如何避免跳过8位代码。
有三种方式呈现图像,每种方式都有点复杂
将图像存储在数据库中;显示内嵌图像
我已经将这种方法用于缩略图,但不建议使用大图像。
将其存储在表格中的MEDIUMBLOB
中,在PHP中使用bin2hex()
将图像转换为字符串。然后使用INSERT ... VALUES (UNHEX('...'))
在MySQL服务器端切换回二进制文件。
重新加载后,让引用PHP说出类似
的内容$b64 = base64_encode($blob);
echo "<img src='data:image/jpeg;base64,$b64'/>";
将图像存储在数据库中;用于生成图像的PHP脚本
当我想使用PHP&#34; image *&#34;在显示图像之前修改图像的功能。由于这比您可能需要的更多,我只会略过需要做的事情。
页面的html会调用另一个脚本,无论你需要什么参数:
<img src=modify.php?this=stuff&that=stuff>
然后在modify.php
中,以
header('Content-type: image/jpeg');
以此结束(假设您正在构建JPEG):
imagejpeg($im);
将图像存储在文件中
这是大多数大型网站大多数时间都会这样做的首选方式。
如果您的文件来自上传,那么这样的内容会将其转移到更好的路径而无需触摸jpg。
$tmpfile = $_FILES['userfile']['tmp_name'];
move_uploaded_file($tmpfile, $uploadfile);
更多信息和示例:http://php.net/manual/en/function.move-uploaded-file.php
在HTML中,只需生成如下内容:
<img src=path/to/file>
对您可以在服务器的路径中放置图像的位置进行一些研究,并确保权限足够。
注意:数据库不参与保留图像,而是有一个用于保存网址的列"path/to/file"
:
image VARCHAR(255) NOT NULL
有待进一步讨论
SHOW CREATE TABLE
。答案 1 :(得分:0)
创建另一个PHP文件,用echo输出原始图像文件。这个php文件将接受一个$ _GET参数来识别图像......图像ID将会这样做。然后回显图像......可以像这样检索图像:
">0"
其中id是db中的id .... imagephpfile.php是你创建的php文件。
此解决方案与此类似: Can't display BLOB stored in database
OR: 使用base64编码这样的内容:
答案 2 :(得分:0)
请告诉我,如果这有助于您可能需要稍微调整一下,但应该做您想做的事情:
<?php
$host = "localhost";
$username = "scott";
$password = "tiger";
$dbname = "mydb";
$link = mysqli_connect($host, $username, $password, $dbname);
$arr = array();
if($link == true)
{
//Displaying images from mysql
$select_image = "SELECT * FROM images //WHERE id = $id";
$sth = $link->query($select_image);
$result=mysqli_fetch_array($sth);
//$var=mysqli_query($link,$select_image);
echo "<table>";
//$desc = $row["Description"];
echo "<tr>";//<td><b>$desc</b></td>";
echo '<td><img src="data:image/jpeg;base64,'.base64_encode( $result['image'] ).'"/></td></tr>';
echo "</table>";
}
else
{
die("ERROR: Could not connect. " . mysqli_connect_error());
}
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$img = $_REQUEST['img'];
$sql1 = "INSERT INTO images (image) VALUES ('$img')";
if(mysqli_query($link, $sql1))
{
echo "Image added successfully.";
}
else
{
echo "ERROR: Could not able to execute $sql1.mysqli_error($link)";
}
}
mysqli_close($link);
?>