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

Php 如何发送包含当前上载的所有文件名列表的电子邮件?,php,json,fine-uploader,Php,Json,Fine Uploader,我已经实现了良好的上传,并有一切工作正常。我甚至还添加了在上传时通过电子邮件发送文件名的功能。但是,如果在一个会话中上载了多个文件,它将为所有这些文件发送一封单独的电子邮件。有没有办法发送一封包含所有文件名的电子邮件 PHP文件(我当前如何获取文件名和发送电子邮件) require_once“handler.php”; $uploader=新的UploadHandler(); $uploader->allowedExtensions=array();//默认情况下允许的所有文件类型 $uploa

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

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

require_once“handler.php”;
$uploader=新的UploadHandler();
$uploader->allowedExtensions=array();//默认情况下允许的所有文件类型
$uploader->sizeLimit=10*1024*1024;//默认值为10 MiB
$uploader->inputName=“qqfile”;//默认情况下匹配Fine Uploader的默认inputName值
$uploader->chunksFolder=“chunks”;
$method=$\服务器[“请求\方法”];
如果($method==“POST”){
标题(“内容类型:文本/普通”);
如果(设置($_GET[“done”])){
$result=$uploader->combineChunks(“数字上传”);
}
//处理上传请求
否则{
//使用文件夹的名称调用handleUpload(),相对于PHP的getcwd()
$result=$uploader->handleUpload(“数字上传”);
//要返回用于上载文件的名称,可以使用以下行。
$result[“uploadName”]=$uploader->getUploadName();
}
echo json_编码($result);
}
$to$xxxxxx@xxxxx.com';  // 给电子邮件地址
$subject='提交新照片'//更改电子邮件主题
$fromxxxxxx@xxxxx.com';      // 从电子邮件地址发送
$message='已上载一个文件以进行计划
'; $message.=''.$result[“uploadName”].'; $headers=“From:”$从…起“\r\n”; $headers.=“回复:”$从…起“\r\n”; $headers.=“MIME版本:1.0\r\n”; $headers.=“内容类型:text/html;字符集=ISO-8859-1\r\n”; if(邮件($to,$subject,$message,$headers));
上传程序脚本(用户准备就绪时使用按钮发送所有文件)


var manualUploader=新qq.FineUploader({
元素:document.getElementById('fine-uploader-manual-trigger'),
模板:“qq模板手动触发”,
请求:{
端点:'/Digital/endpoint.php'
},
缩略图:{
占位符:{
waitingPath:“/placeholders/waiting generic.png”,
notAvailablePath:“/placeholders/not_available-generic.png”
}
},
自动上载:false,
调试:正确
});
qq(document.getElementById(“触发器上载”)).attach(“单击”,函数(){
manualUploader.uploadStoredFiles();
});

您有几个选项可以实现您想要的

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



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

看起来您已将
自动上载
设置为
错误
。这通常意味着您的用户将选择要上载的所有文件,然后单击按钮开始所有选定文件的上载过程。因此,也许您可以假设,一旦此批中的最后一个文件成功发送,您就可以继续发送电子邮件了

你应该做两件事:

  • 注册,并在Fine Uploader触发此事件时向服务器发出请求。此时,您可以假定批处理中的所有文件都已发送到服务器
  • 包括唯一标识该批文件所需的一些信息。通过调用此参数并将其包含为JavaScript对象,可以将此标识符与每个文件一起发送

  • 上述第2条的另一种选择是,在批处理中包含所有优秀上传者分配的UUID的列表,以及您的
    onAllComplete
    请求。
    onAllComplete
    事件处理程序将被传递两个参数:一个是成功上传的ID数组,另一个是未成功上传的ID数组。然后,您可以使用获取每个文件的UUID。

    哪里是
    $uploader
    的代码?它位于我包含的代码之上…抱歉,我不想占用整个屏幕的所有代码。我将在上面添加它。js是一次性还是单独上传所有文件?我相信它是单独上传,但同时上传?如果这有道理的话。进度条在所有文件上运行,但它们在不同的时间完成。我不确定关键是通过js一次上传所有文件,还是在php代码中能够获得上传的所有文件。如果他们一次上载所有文件,$result[“uploadName”]会显示所有文件名吗?JavaScript会向服务器发送单独的并行上载请求。“如果他们一次上载所有文件,
    $result[“uploadName”]
    会显示所有文件名吗?”在您的情况下,不会,因为每个文件都作为不同的请求处理,所以,
    $result[“uploadName”]
    ,每次只能有一个文件名。好的,所以选项1听起来像是我想要的方式。文档显示我可以通过“onSubmitted”回调来获取文件名。抱歉,我正在学习这方面的方法,非常感谢您的帮助。我是否可以使用类似的方式获取阵列?回调:{onSubmitted:function(id,name){var files=fineUploader.getUploads({status:['submitted']});}}}或者您有一个示例说明如何将数组发布到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>