如何发送包含当前上传的所有文件名列表的电子邮件?

时间:2015-09-08 19:13:15

标签: php json fine-uploader

我已经实现了Fine Uploader,并且一切正常。我甚至添加了在上传时通过电子邮件发送文件名的功能。但是,如果在一个会话中上载了多个文件,它将为所有这些文件发送单独的电子邮件。有没有办法发送一封包含所有文件名的电子邮件?

PHP文件(我如何获取文件名并当前发送电子邮件)

require_once "handler.php";


$uploader = new UploadHandler();

$uploader->allowedExtensions = array(); // all files types allowed by default

$uploader->sizeLimit = 10 * 1024 * 1024; // default is 10 MiB

$uploader->inputName = "qqfile"; // matches Fine Uploader's default inputName value by default

$uploader->chunksFolder = "chunks";
    $method = $_SERVER["REQUEST_METHOD"];
if ($method == "POST") {
    header("Content-Type: text/plain");


    if (isset($_GET["done"])) {
        $result = $uploader->combineChunks("Digital_Uploads");
    }
    // Handles upload requests
    else {
        // Call handleUpload() with the name of the folder, relative to PHP's getcwd()
        $result = $uploader->handleUpload("Digital_Uploads");

        // To return a name used for uploaded file you can use the following line.
        $result["uploadName"] = $uploader->getUploadName();

    }
    echo json_encode($result);
}

    $to      = 'xxxxxx@xxxxx.com';  // give to email address 
$subject = 'New Photo Submitted';   //change subject of email 
$from    = 'xxxxxx@xxxxx.com';      // give from email address 
$message = '<html><body><h1>A file has been uploaded for scheduling</h1><br>';
$message .= '<h3>'.$result["uploadName"].'</h3></body></html>';
$headers = "From: " . $from . "\r\n"; 
$headers .= "Reply-To: ". $from . "\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n"; 
    if(mail($to, $subject, $message, $headers));

上传器脚本(使用按钮在用户准备好时发送所有文件)

<script>
        var manualUploader = new qq.FineUploader({
            element: document.getElementById('fine-uploader-manual-trigger'),
            template: 'qq-template-manual-trigger',
            request: {
                endpoint: '/Digital/endpoint.php'
            },
            thumbnails: {
                placeholders: {
                    waitingPath: '/placeholders/waiting-generic.png',
                    notAvailablePath: '/placeholders/not_available-generic.png'
                }
            },
            autoUpload: false,
            debug: true


        });


        qq(document.getElementById("trigger-upload")).attach("click", function() {
            manualUploader.uploadStoredFiles();
        });
</script>

2 个答案:

答案 0 :(得分:1)

你有几个选择来实现你想要的目标。

1 - 从php代码中删除电子邮件部分,并在javascript代码中创建一个数组以跟踪文件名,然后,在上传所有文件时,使用{{1使用所有文件名发布帖子或获取包含邮件代码的javascript文件的请求。 这样,您只发送一封电子邮件,而不是一堆电子邮件。

2 - 另一种选择是删除php代码并让php处理所有上传,同时创建一个数组来跟踪文件名,当所有上传完成后,发送电子邮件。

答案 1 :(得分:1)

您似乎已将autoUpload设置为false。这通常意味着您的用户将选择要上载的所有文件,然后单击按钮开始所有选定文件的上载过程。所以,也许您可​​以假设,一旦在该批次中成功发送了最后一个文件,您就可以继续发送您的电子邮件。

你应该做的两件事:

  1. 注册an onAllComplete callback handler,并在Fine Uploader触发此事件时向您的服务器发出请求。此时,您可以假设批处理中的所有文件都已发送到服务器。
  2. 包含唯一标识该批文件所需的一些信息。可以通过调用the setParams API method并将此参数作为JavaScript对象包含在每个文件中来发送此标识符。
  3. 上述#2的替代方法是在您的onAllComplete请求中包含批量中所有Fine Uploader分配的UUID的列表。 onAllComplete事件处理程序将传递两个参数:一组成功上载的ID,以及一组未成功上载的ID。然后,您可以使用the getUploads API method为每个文件获取UUID。