【问题标题】:Upload image in MYSQL database & display it using PHP with Swift在 MYSQL 数据库中上传图像并使用 PHP 和 Swift 显示它
【发布时间】:2018-06-08 07:31:53
【问题描述】:

问题说明:我正在使用 Swift 和 PHP 的 POST 请求在 MYSQL 数据库中上传图像。我能够在数据库中插入选定的图像。但无法显示。

MYSQL 表格式:

现在我将这些图像从数据库显示到我的本地主机。这给了我如下结果......

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

【问题讨论】:

  • 您正在将原始图像文件输出到 img 标签...
  • 请帮助我应该在哪里进行更改。

标签: ios mysql swift rest


【解决方案1】:

从用户那里获取图片

查看http://php.net/manual/en/reserved.variables.files.phphttp://php.net/manual/en/features.file-upload.php和朋友了解如何使用$_FILES接收上传的资料。

一旦将图像放入变量中,比如$jpg,就不要使用任何文本编码/解码函数;它只会破坏事物。下面的不同方法将说明如何避免绊倒 8 位代码。

图片的呈现方式有3种,每一种都有些复杂

将图像存储在数据库中;内嵌显示图片

我已将这种方法用于缩略图,但不建议用于大图像。

将其存储在表格中的MEDIUMBLOB 中,在PHP 中使用bin2hex() 将图像转换为字符串。然后在 MySQL 服务器端使用INSERT ... VALUES (UNHEX('...')) 切换回二进制。

重新加载后,让引用的 PHP 说类似

$b64 = base64_encode($blob);
echo "<img src='data:image/jpeg;base64,$b64'/>";

将图像存储在数据库中;生成图片的PHP脚本

当我想使用 PHP 的“image*”函数在显示之前修改图像时,我会使用它。由于这比您可能需要的涉及更多,因此我将仅略过需要做什么。

页面的 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>

研究一下可以在服务器路径中放置图片的位置,并确保权限足够。

注意:数据库不参与保存图像,而是有一个用于保存url的列"path/to/file"

image VARCHAR(255) NOT NULL

供进一步讨论

  • 您想深入研究这 3 种技术中的哪一种?
  • 让我们看看您正在生成的 HTML。
  • 让我们看看SHOW CREATE TABLE

【讨论】:

    【解决方案2】:

    创建另一个 PHP 文件,输出带有回显的原始图像文件。这个 php 文件将接受一个标识图像的 $_GET 参数……图像 id 就可以了。然后回显图像...可以像这样检索图像:

    <img src="imagephpfile.php?id=10" />
    

    其中 id 是 db 中的 id.... imagephpfile.php 是您创建的 php 文件。

    此解决方案与此类似: Can't display BLOB stored in database

    或者: 使用 base64 对内容进行编码,如下所示:

    PHP display image BLOB from MySQL

    【讨论】:

    • 不显示图片
    • 查看我发布的两个链接...并告诉我哪些解决方案不起作用...
    • 也许您保存在数据库中的那些不是图像 blob……从那里开始……stackoverflow.com/questions/29750353/…
    【解决方案3】:

    如果这对你有帮助,请告诉我,你可能需要稍微调整一下,但应该做你想做的:

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

    【讨论】:

      猜你喜欢
      • 2020-06-22
      • 2019-04-08
      • 2014-06-18
      • 2017-07-16
      • 2018-07-16
      • 2016-09-01
      • 2016-05-25
      • 1970-01-01
      • 2012-04-02
      相关资源
      最近更新 更多