在MYSQL数据库中上传图片&使用PHP和Swift显示它

时间:2016-11-03 09:26:47

标签: ios mysql swift rest

问题陈述:我使用Swift& amp;的POST请求在MYSQL数据库中上传图像PHP。我能够在数据库中插入所选图像。但无法显示它。

MYSQL表格格式:

enter image description here

现在我将这些图像从数据库显示到我的localhost。这给我的结果如下......

enter image description here

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

3 个答案:

答案 0 :(得分:1)

从用户那里获取图片

请参阅http://php.net/manual/en/reserved.variables.files.phphttp://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

有待进一步讨论

  • 您希望深入了解哪3种技术?
  • 让我们看看您正在生成的HTML。
  • 让我们看看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编码这样的内容:

PHP display image BLOB from MySQL

答案 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);
?>