【问题标题】:Uploading multiple images with dropzone.js with PHP使用 PHP 使用 dropzone.js 上传多个图像
【发布时间】:2017-05-21 16:08:06
【问题描述】:

我正在使用dropzone.js 构建一个简单的图像上传。当我上传单个图像时,一切正常,但是,当我尝试一次删除和上传多个图像时,上传行为很奇怪。有时它会上传几张图片而忽略其他图片。有时它不会上传任何内容。我的印象是 dropzone 在根据其文档上传多个文件时为每个文件发送单独的帖子,所以我无法确定这是 PHP 问题还是与 dropzone 相关。

这是我目前所拥有的:

HTML:

<form id="dzone" action="upload.php" class="dropzone">

    <p class="dz-message"><span>Drop images here or click to upload.</span><br />
    <span class="note">Only images with the following file types are allowed <strong>(jpg , jpeg , png , bmp)</strong></span></p>

    <!-- no-script fallback -->
    <div class="fallback">
        <input name="file" type="file" multiple />
    </div>

</form>

JS:

Dropzone.options.dzone = {
    acceptedFiles: "image/*",
    maxFilesize: 20,
    parallelUploads: 3
};

PHP:

$ds = DIRECTORY_SEPARATOR; 

$upload_location = 'uploads';

if(!empty($_FILES)) {

    $temp_file = $_FILES['file']['tmp_name'];

    // Check if uploaded file is an image
    if(!is_valid_type($temp_file)) {
        echo '<p>only images are allowed</p>';
        exit;
    }

    $temp_name = explode('.' , $_FILES['file']['name']);
    $target_path = dirname(__FILE__) . $ds . $upload_location . $ds;
    $new_file_name = round(microtime(true)) . '.' . end($temp_name);
    $target_file = $target_path . $new_file_name;

    move_uploaded_file($temp_file , $target_file);

    // Change file permission to read only
    chmod($target_file, 0644);
}

function is_valid_type($file) {

    // Image Size
    $size = getimagesize($file);
    if(!$size) {
        return 0;
    }

    // Valid file types
    $valid_types = array(IMAGETYPE_GIF , IMAGETYPE_JPEG , IMAGETYPE_PNG , IMAGETYPE_BMP);

    if(in_array($size[2] , $valid_types)) {
        return 1;
    } else {
        return 0;
    }
}

我尝试更改 PHP 表单引擎以在 foreach 循环中处理每个文件,但结果相同。我错过了什么吗?

【问题讨论】:

  • 你试过把parallelUploads改成1吗?
  • 我得到了同样的结果。我刚刚尝试使用该设置上传三张图片,但只有一张通过。

标签: javascript php file-upload


【解决方案1】:

这是解决您问题的正确代码!

在您的 upload.php 文件中更改:

更改字符串:

round(microtime(true))

到:

round(microtime(true)) + rand()

【讨论】:

    猜你喜欢
    • 2017-06-25
    • 2016-10-31
    • 2016-04-25
    • 1970-01-01
    • 2015-09-13
    • 2019-10-01
    • 1970-01-01
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多