【问题标题】:php creating thumbnail on multiple file upload and saving both thumbnail and image in two different directoriesphp在多个文件上传时创建缩略图并将缩略图和图像保存在两个不同的目录中
【发布时间】:2019-02-07 02:20:49
【问题描述】:

我正在尝试将多张图片上传到我网站中的文件夹。虽然文件上传没有问题,但我正在尝试为在同一功能中上传的所有图像集成创建缩略图,但该功能不起作用。

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)
  }
}

文件上传.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】:

    $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()

    【讨论】:

    • 谢谢。我尝试将 $tardir 添加到 createThumbnail 调用中。但它仍然无法正常工作。但是,当我从 createThumbnail 函数中删除所有代码并仅回显文件名时,所有选择的文件都会得到回显。同样,当我添加 createThumbnail 函数时,我只能上传一张图片,而当我删除时,我可以上传所有选定的图片
    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2020-03-25
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多