Javascript 列出前端目录中的PDF文件,并允许用户单击文件并发送电子邮件?
我的网站服务器上有一个目录,其中包含很多PDF文件 有没有办法在我的网站前端显示这个目录?因此,所有文件都将以列表格式列出。然后,我可以通过复选框或类似的方式“单击”一个文件,然后通过电子邮件发送该文件Javascript 列出前端目录中的PDF文件,并允许用户单击文件并发送电子邮件?,javascript,php,joomla,Javascript,Php,Joomla,我的网站服务器上有一个目录,其中包含很多PDF文件 有没有办法在我的网站前端显示这个目录?因此,所有文件都将以列表格式列出。然后,我可以通过复选框或类似的方式“单击”一个文件,然后通过电子邮件发送该文件 我正在使用Joomla,所以这很可能是一个自定义模块。我已经知道如何使用查询列出文件,但是查询会使服务器过载(503错误),因为实际上需要显示很多文件。您需要控制选择了多少文件。在页面上显示大量文件/复选框是个坏主意。尤其是如果有这么多文件,你无法查询所有文件而不出错。(503错误可能还有其他原
我正在使用Joomla,所以这很可能是一个自定义模块。我已经知道如何使用查询列出文件,但是查询会使服务器过载(503错误),因为实际上需要显示很多文件。您需要控制选择了多少文件。在页面上显示大量文件/复选框是个坏主意。尤其是如果有这么多文件,你无法查询所有文件而不出错。(503错误可能还有其他原因。)我们在谈论多少PDF?无论如何 如果只显示100个文件,而我选择全部100个,会发生什么。您的代码将向我发送一封包含100个附件的电子邮件。(即使是100封也会失败,电子邮件并不适用于此。)然后,如果我真的喜欢您的pdf,我所做的一切就是整天坐在我的电脑前,点击“提交”按钮反复发送一封电子邮件,每次按按钮都会发送100个附件。现在想象100个人都这样做。我相信你明白了,这会很快破坏你服务器的资源 如果可以从数据库中获取文件名,那么这可能是最好的方法。我会对结果进行分页,所以一次只显示20个文件。我只允许用户选择每次提交的最大文件量,因为电子邮件的功能很可能受到限制。我甚至可以控制用户在给定时间段内执行此功能的频率,以防止滥用 我还会考虑直接将文件从服务器下载到用户的计算机,并完全绕过电子邮件,除非这不在当前项目的目标范围内 但是这些都是在你构建这个系统时要牢记的主题。但是为了得到一个概念的证明。看看下面 第1步-下载PHPMailer并启动它,这样您就可以调用
$mail=newphpmailer代码>在页面上,它不会出错。以下是一个链接:
第2步-搜索文件夹结构或数据库,并返回包含文件路径的数组
步骤3-在阵列上循环并填充复选框
步骤4-创建PHPMailer对象并添加对象属性-发送电子邮件
require('path/to/PHPMailerClass'); //Or the path to the autoloader if that is how you installed.
$path = '/root/path/to/pdfFiles/';
$array = array_map('basename', glob($path . '*.pdf')); //This will return all pdf files in the directory.
echo
'<form action="" method="post">';
foreach($array as $file){
echo '<input name="fileName[]" type="checkbox" value="' . $file . '">' . $file . '<br>';
}
echo '<input name="send_email" type="submit" value="Send Email">';
echo
'</form>';
//You will need an array containing the user's information.
$userData = array(
'name' => 'John Doe',
'email' => 'John.Doe@example.com'
);
if(isset($_POST['send_email']) && $_POST['send_email']){ //Make sure they hit submit.
if(isset($_POST['fileName']) && $_POST['fileName']){ //Make sure they selected a file.
if(count($_POST['fileName']) > 5){
echo 'You can only select 5 files.';
exit();
}
//Set up the email.
$mail = new PHPMailer;
$mail->setFrom('from@example.com', 'Your Name');
$mail->addAddress($userData['email'], $userData['name']);
$mail->Subject = 'This is how to send attachments.';
$mail->isHTML(true);
$mail->Body = $userData['name'] . ',<br>' .
'Here are the files you selected!';
//Here is the attachment part.
foreach($_POST['fileName'] as $file){ //Loop across the selected files.
$mail->AddAttachment($path . $file, $file, 'base64', 'application/pdf'); //Attach the file.
}
if(!$mail->send()) { //Send the mail.
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
echo 'Message has been sent.';
}
}else{
echo 'No file was selected.';
}
}
require('path/to/PHPMailerClass')//或者自动加载器的路径(如果您是这样安装的)。
$path='/root/path/to/pdfFiles/';
$array=array_map('basename',glob($path.*.pdf')//这将返回目录中的所有pdf文件。
回声
'';
foreach($array作为$file){
回显'.$file.'
';
}
回声';
回声
'';
//您需要一个包含用户信息的数组。
$userData=array(
'name'=>'John Doe',
“电子邮件”=>“约翰。Doe@example.com'
);
如果(设置($\u POST['send\u email'])和&$\u POST['send\u email']){//确保他们点击提交。
如果(设置($\u POST['fileName'])和&$\u POST['fileName']){//确保他们选择了一个文件。
如果(计数($_POST['fileName'])>5){
echo“您只能选择5个文件”;
退出();
}
//设置电子邮件。
$mail=新的PHPMailer;
$mail->setFrom('from@example.com‘你的名字’;
$mail->addAddress($userData['email'],$userData['name']);
$mail->Subject='这是发送附件的方式';
$mail->isHTML(true);
$mail->Body=$userData['name'].,
'。
'这是您选择的文件!';
//这是附件部分。
foreach($_POST['fileName']作为$file){//在选定文件之间循环。
$mail->AddAttachment($path.$file,$file,'base64','application/pdf');//附加文件。
}
如果(!$mail->send()){//发送邮件。
回显“未发送消息”;
回显“邮件错误:”。$mail->ErrorInfo;
}否则{
回显“消息已发送”;
}
}否则{
echo“未选择任何文件”;
}
}
如果您在本地主机设置上进行测试,您可能需要进行一些故障排除,以获得要发送的电子邮件。我对谷歌搜索和解决这个问题没有经验。。如果在尝试了一些成功的方法后,您仍然无法解决问题,请发布另一个问题。欢迎使用Stackoverflow!不幸的是,像这样的问题是因为它们主要解决了业务逻辑的许多需求的实现,并且也没有显示您的任何努力。如果您在系统的实现方面有问题,请尝试将您的问题分成几个部分。