php在多个文件上传时创建缩略图并将缩略图和图像保存在两个不同的目录中

问题描述 投票:0回答:1

我正在尝试将多个图像上传到我网站的文件夹中。虽然文件上传没有问题,但我正在尝试集成创建缩略图,以便在同一功能中上传的所有图像都无法正常工作。

HTML表格:

<form class="navbar-form pull-left"  action="fileupload.php" name="fileupload" method="post" enctype="multipart/form-data">
        <label for="file" style="cursor: pointer;padding:5px 0 0 0;font-weight:normal" title="Add Images">IMAGES</label>
        <input type="file" name="file[]" multiple id="file"><br>
      </form>

使用Javascript:

function _id(e) {return document.getElementById(e)}    
_id('file').onchange = function() {
  var theFile = this.files;
  if(theFile.length === 1) {
    var uploader = new XMLHttpRequest();
    var file = new FormData();
    file.append("file", theFile[0]);
    uploader.onreadystatechange = function() {
      if(uploader.readyState === 4 && uploader.status === 200) {
        show_message('Uploading Image');
        console.log(uploader.responseText);

      }
    }
    uploader.open('POST','fileupload.php',true);
    uploader.send(file);
  } else {
    var start = 0,
    setter,
    buff = true;
    setter = setInterval(function() {
      if (buff === true) {
        show_message('Uploading Images');
        buff = false;
        var uploader = new XMLHttpRequest();
        var file = new FormData();
        file.append('file', theFile[start]);
        uploader.onreadystatechange = function() {
          if(uploader.readyState === 4 &&  uploader.status === 200) {
            console.log(uploader.responseText);
            start++;
            buff = true;
          }
        }
        uploader.open('POST','fileupload.php',true);
        uploader.send(file);
      }
      if(start >= theFile.length) {
        clearInterval(setter);
      }
    }, 200)
  }
}

fileupload.php

<?php
session_start();
$database = $_SESSION['folder'];
$match = $_SESSION['matchLst'];
$tardir = "/var/www/html/projects/" . $database . "/" . $match . "/";
$thumb = $match . "_thumb/";
$thumbdir = $tardir . $thumb;

function createThumbnail($filename) {
    if($filename) {
        $im = imagecreatefromjpeg($tardir . $filename);
    }
    $x = imagesx($im);
    $y = imagesy($im);

    $nx = 100;
    $ny = 100;

    $nm = imagecreatetruecolor($nx, $ny);
    imagecopyresized($nm, $im, 0, 0, 0, 0, $nx, $ny, $x, $y);
    if(!file_exists($thumbdir)) {
        if(mkdir($thumbdir)) {
            imagejpeg($nm, $thumbdir . $filename);
        } else {
            die("Thumbnail directory could not be created");
        }
    } else {
            imagejpeg($nm, $thumbdir . $filename);
    }
}


if(!isset($_FILES['file'])){die();}

if(isset($_FILES['file'])) {
    if($_FILES['file']['name']) {
        $filename = $_FILES['file']['name'];
        $source = $_FILES['file']['tmp_name'];
        $target = $tardir . $filename;
        move_uploaded_file($source, $target);
        createThumbnail($filename);  
        echo "Images uploaded";
    }
}
?>

我面临2-3个问题:

在fileupload.php文件中,如果我注释掉createThumbnail($filename),那么我可以上传多个文件而不会出现问题。当我包含createThumbnail函数时,既不会发生文件上传也不会创建缩略图。我已尝试过这里给出的各种示例和git - 但是,无法创建缩略图,也无法将其保存到文件夹中。

php image thumbnails
1个回答
0
投票

这里没有设置$ tardir:

function createThumbnail($filename) {
    if($filename) {
        $im = imagecreatefromjpeg($tardir . $filename);
    }

你应该替换你的函数调用:

createThumbnail($filename);  

通过:

createThumbnail($tardir . $filename);  

并且不要在函数中使用$ tardir。

设置绝对路径时要小心:

$tardir = "/var/www/html/projects/" . $database . "/" . $match . "/";

如果路径发生变化,您的脚本将被破坏。相反,你可以使用magic-constants like DIR和/或realpath()

© www.soinside.com 2019 - 2024. All rights reserved.