【问题标题】:Upload image file (NOT selected via form, just within a folder) to mysql via PHP?通过PHP将图像文件(未通过表单选择,仅在文件夹中)上传到mysql?
【发布时间】:2016-05-30 04:34:33
【问题描述】:

我只是不清楚如何格式化 - 过去我让用户上传他们通过表单和 javascript 从计算机中选择的图像,如下所示:

$("#uploadimage").on('submit',(function(e) {
        e.preventDefault();


        $.ajax({
        url: "../php/upload.php", // Url to which the request is send
        type: "POST",             // Type of request to be send, called as method
        data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values)
        contentType: false,       // The content type used when sending data to the server.
        cache: false,             // To unable request pages to be cached
        processData:false,        // To send DOMDocument or non processed data file it is set to false
        success: function(data)   // A function to be called if request succeeds
        {

        }
        });
        }));

将文件发送到 php 脚本:

if(isset($_FILES["file"]["type"]))
{
$validextensions = array("jpeg", "jpg", "png");
$maxsize = 99999999;
$temporary = explode(".", $_FILES["file"]["name"]);
$file_extension = end($temporary);
if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg")
) && ($_FILES["file"]["size"] < $maxsize)//Approx. 100kb files can be uploaded.
&& in_array($file_extension, $validextensions)) {

$size = getimagesize($_FILES['file']['tmp_name']);
$type = $size['mime'];
$imgfp = fopen($_FILES['file']['tmp_name'], 'rb');
$size = $size[3];
$name = $_FILES['file']['name'];

$sql = new mysqli("localhost","username","password","sqlserver");
$imgfp64 = base64_encode(stream_get_contents($imgfp));
$update = "UPDATE sqlserver.imageblob set image='".$imgfp64."', image_type='".$type."', image_name='".$name."', image_size='".$size."' where user_id=".$account['id'];
$sql->query($update);

然后我就可以像这样显示图像并回显 HTML:

$imgdata = $array['image']; //store img src
     $src = 'data:image/jpeg;base64,'.$imgdata;

但是现在我需要上传一个我已经存储在文件夹中的图像文件,即../images/image1.png,而不是表单中的上传文件。

理想情况下我会写:

$imgfile = "../images/image1.png"

然后将其插入我的 php 代替 $_FILES['file']['name'] 但我不知道如何正确地写出来。我是 mysql 的新手,只是通过像上面这样的文件名收到错误消息。

如何将文件夹中已有的图像上传到 mysql 表?

我尝试过的:

【问题讨论】:

  • 也许只是创建一个 html 页面,用 php 构建,将所有图像加载到其中。每个图像都可以有一个 onclick 处理程序,它将为其路径分配一些 javascript 变量。然后,您可以使用该路径发送 ajax 请求。希望这会有所帮助。
  • 试试on('click', (function(e){}));
  • @divinemaniac 不,我不需要回显图像,只需要将其存储在 mysql 表中
  • 如果你想从你的文件系统中获取一个文件,你需要使用file_get_contents($filename);然后将它存储在你的数据库中。
  • @Rasclatt 我已经更新了我的问题。仍然不确定如何格式化 - 我在上面的代码中做错了什么?

标签: javascript php jquery html mysql


【解决方案1】:

你可以使用DirectoryIterator:

将此文件保存到您的images 文件夹并运行它:

<?php

    $validextensions = array("jpeg", "jpg", "png");
    $dir = new DirectoryIterator(dirname(__FILE__));
    foreach ($dir as $fileinfo) {
        if (!$fileinfo->isDot()) {

            $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); /* GET EXTENSION OF FILE */

            if(in_array($extension, $validextensions)){ /* IF FILE IS IMAGE; JPEG, JPG, OR PNG */

                /* CHECK IF IMAGE IS ALREADY IN THE DATABASE */
                $check = $sql->query("SELECT * FROM image_table WHERE image_col = ?"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */
                $check->bind_param("s", $fileinfo->getFilename());
                $check->execute();
                $check->store_result();
                $noofrows = $check->num_rows;
                $check->close();

                if($noofrows == 0){ /* IF IMAGE NAME IS NOT YET IN THE DATABASE */
                    /* INSERT FILE NAME TO DATABASE */
                    $stmt = $sql->query("INSERT INTO image_table (image_col) VALUES (?)"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */
                    $stmt->bind_param("s", $fileinfo->getFilename());
                    $stmt->execute();
                    $stmt->close();
                }

            }
        }
    }

?>

上面会将图像名称保存到您的数据库中。

当您想要显示图像时,只需运行以下查询:

$getimg = $sql->prepare("SELECT image_col FROM image_table"); /* REPLACE NECESSARY TABLE AND COLUMN NAME */
$getimg->execute();
$getimg->bind_result($image);
while($getimg->fetch()){
    echo '<img src="images/'.$image.'">';
}
$getimg->close();

【讨论】:

  • 不 - 这不是问题。我不想有任何形式的形式。没有表格,也没有选择图像。当调用 PHP 类中的函数时,我只想使用计算机上的图像手动填充我的 mysql 表(它的用户帐户)
  • 我想用 PHP 完成这一切——没有 javascript,没有表单。只需在 mysql 表中粘贴和图像
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多