Загрузка в папку Webkitdirectory PHP - «эхо» не работает? - PullRequest
0 голосов
/ 25 ноября 2018

Используя измененную версию кода в этом руководстве здесь: http://sapphion.com/2012/06/12/keep-directory-structure-when-uploading/ Я смог загрузить целую папку на свой веб-сервер и сохранить ее структуру каталогов.Тем не мение.код, сообщающий пользователю, что загрузка успешно завершена, не работает - кажется, что команды 'echo' не выполняются.

Вот код.

PHP:

<?php
if(sizeof($_FILES) > 0)
    $fileUploader = new FileUploader($_FILES);

class FileUploader{
    public function __construct($uploads,$uploadDir='submissions/'){

        // Split the string containing the list of file paths into an array 
        $paths = explode("###",rtrim($_POST['paths'],"###"));

        // Loop through files sent
        foreach($uploads as $key => $current)
        {
            // Stores full destination path of file on server
            $this->uploadFile=$uploadDir.rtrim($paths[$key],"/.");
            // Stores containing folder path to check if dir later
            $this->folder = substr($this->uploadFile,0,strrpos($this->uploadFile,"/"));

            // Check whether the current entity is an actual file or a folder (With a . for a name)
            if(strlen($current['name'])!=1) {
                // Upload current file
                if($this->upload($current,$this->uploadFile)) {
                    echo "The files have been uploaded.";
                    //Email Storehouse
                    mail('email address', 'title', 'body', 'from');
                }
                else {
                    echo "Error";
                }
            }
        }
    }

    private function upload($current,$uploadFile){
        // Checks whether the current file's containing folder exists, if not, it will create it.
        if(!is_dir($this->folder)){
            mkdir($this->folder,0700,true);
        }
        // Moves current file to upload destination
        if(move_uploaded_file($current['tmp_name'],$uploadFile)) {
            return true;
        }
        else {
            return false;
        }
    }
}

?>

Примечание: строка электронной почты, отредактированная для удаления конфиденциальных данных, не должна иметь никакого значения для команд 'echo', поскольку она не работает с или без битов электронной почты.

JavaScript для сохраненияструктура каталогов (на всякий случай, если это оказывает какое-либо влияние!)

window.onload = function(){
var output = document.getElementById('output');

    // Detect when the value of the files input changes.
    document.getElementById('files').onchange = function(e) {
        // Retrieve the file list from the input element
        uploadFiles(e.target.files);

        // Outputs file names to div id "output"
        output.innerText = "";
        for (var i in e.target.files)
            output.innerText  = output.innerText + e.target.files[i].webkitRelativePath+"\n";
    }
}


function uploadFiles(files){

    // Create a new HTTP requests, Form data item (data we will send to the server) and an empty string for the file paths.
    xhr = new XMLHttpRequest();
    data = new FormData();
    paths = "";

    // Set how to handle the response text from the server
    xhr.onreadystatechange = function(ev){
        console.debug(xhr.responseText);
    };

    // Loop through the file list
    for (var i in files){
        // Append the current file path to the paths variable (delimited by tripple hash signs - ###)
        paths += files[i].webkitRelativePath+"###";
        // Append current file to our FormData with the index of i
        data.append(i, files[i]);
    };
    // Append the paths variable to our FormData to be sent to the server
    // Currently, As far as I know, HTTP requests do not natively carry the path data
    // So we must add it to the request manually.
    data.append('paths', paths);

    // Open and send HHTP requests to upload-light.php
    xhr.open('POST', "upload.php", true);
    xhr.send(this.data);
    window.alert("Files uploading.\n\nIMPORTANT: Please leave this page open for at least 10 minutes whilst the files upload!");
}

Большое спасибо заранее за любую помощь и / или совет!

Джейсон

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...