【问题标题】:How to upload image to multiple folders using core php only?如何仅使用核心 php 将图像上传到多个文件夹?
【发布时间】:2018-03-12 07:43:30
【问题描述】:

我尝试使用以下代码在多个文件夹中上传图片,但我遇到的问题是上传的图片显示为黑色。

主文件夹上传成功,缩略图文件夹显示黑色。

代码

$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);


$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
    if($check !== false) {
        echo "File is an image - " . $check["mime"] . ".";
        $uploadOk = 1;
    } else {
        echo "File is not an image.";
        $uploadOk = 0;
    }
}
// Check if file already exists
if (file_exists($target_file)) {
    echo "Sorry, file already exists.";
    $uploadOk = 0;
}
// Check file size
    if ($_FILES["fileToUpload"]["size"] > 500000) {
    echo "Sorry, your file is too large.";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    $originalsFolder = "uploads/"; //original photos only
    $thumbsFolder =   "thumbnails/";  //thumbnails only -- 150

     if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {    
        $fnam=$_FILES["fileToUpload"]["name"];
        $q = "INSERT INTO testimage (id, image) VALUES (NULL, '".$fnam."')";
        $query = mysqli_query($con,$q);
        $file = $originalsFolder.$_FILES['fileToUpload']['name'];
        createImageCopy($file, $thumbsFolder,  250);
    }
}

以下是缩略图的回调函数

function createImageCopy($file, $folder, $newWidth){

    list($width, $height) = getimagesize($file);
    $imgRatio = $width/$height;
    $newHeight = $newWidth/$imgRatio;

    if($_FILES['fileToUpload']['type'] =="image/jpeg"){
        $thumb = imagecreatetruecolor($newWidth, $newHeight);
        $source = imagecreatefromjpeg($file);
    }else if($_FILES['fileToUpload']['type'] == "image/png"){
        $thumb = imagecreatetruecolor($newWidth, $newHeight);
        $source = imagecreatefrompng($file);
    }

    if($newFileName = $folder.$_FILES['fileToUpload']['name']){
        imagejpeg($thumb,$newFileName,80);
    }else if($newFileName = $folder.$_FILES['fileToUpload']['name']){
        imagepng($thumb,$newFileName,8);
    }

    imagedestroy($source);
    imagedestroy($thumb);

}

HTML 代码

<form action="" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">

</form>

上传图片有2个文件夹 1)上传(它工作正常,上传的图像也显示) 2) 缩略图(上传图片成功但it's showing black image

我尝试了很多方法,但没有找到任何方法,如果有人知道更多,请帮助我。

【问题讨论】:

    标签: php html file-upload


    【解决方案1】:

    试试下面的函数,而不是createImageCopy

    function create_thumb($src, $dest, $desired_width) {
    
        /* read the source image */
        $source_image = imagecreatefromjpeg($src);
        $width = imagesx($source_image);
        $height = imagesy($source_image);
    
        /* find the "desired height" of this thumbnail, relative to the desired width  */
        $desired_height = floor($height * ($desired_width / $width));
    
        /* create a new, "virtual" image */
        $virtual_image = imagecreatetruecolor($desired_width, $desired_height);
    
        /* copy source image at a resized size */
        imagecopyresampled($virtual_image, $source_image, 0, 0, 0, 0, $desired_width, $desired_height, $width, $height);
    
        /* create the physical thumbnail image to its destination */
        imagejpeg($virtual_image, $dest);
    }
    

    并使用这个函数作为函数createImageCopy的地方

    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {    
            $fnam=$_FILES["fileToUpload"]["name"];
            $q = "INSERT INTO testimage (id, image) VALUES (NULL, '".$fnam."')";
            $query = mysqli_query($con,$q);
            $file = $originalsFolder.$_FILES['fileToUpload']['name'];
            $thumbsFolder =   "thumbnails/";  //thumbnails only -- 150
            $path_to_image_directory = $thumbsFolder . basename($_FILES["fileToUpload"]["name"]);
            create_thumb($file, $path_to_image_directory, 150);
        }
    

    【讨论】:

      【解决方案2】:

      如果您要制作同一文件的精确副本,请尝试使用。

       if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) 
       {    
          $fnam=$_FILES["fileToUpload"]["name"];
          $q = "INSERT INTO testimage (id, image) VALUES (NULL, '".$fnam."')";
          $query = mysqli_query($con,$q);
          $file = $originalsFolder.$_FILES['fileToUpload']['name'];
          copy($file,$thumbsFolder.$_FILES['fileToUpload']['name']);
       }
      

      【讨论】:

      • 使用副本我们上传原始大小的副本图像而不是上传缩略图大小。
      猜你喜欢
      • 2016-12-21
      • 2021-09-29
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      • 2018-05-28
      相关资源
      最近更新 更多