从视图内的公共文件夹访问资产(Laravel)

时间:2017-12-29 10:34:46

标签: php laravel phpmailer

我无法在视图中访问资源。

这是我的代码。

 $mail->addAttachment(asset($file), 'receiptFile', 'base64', 'application/octet-stream');

浏览器显示以下错误:

  

无法访问文件:   http://localhost/receiptGenerator2/public/5a46187d954de.png消息   无法发送.Mailer错误:无法访问文件:   http://localhost/receiptGenerator2/public/5a46187d954de.png ------

正如您所见,文件的路径已成功找到。

如果Laravel可以找到该文件,为什么会显示错误。

3 个答案:

答案 0 :(得分:1)

请尝试这种方式 使用资产并提供图片名称,如果文件是任何文件夹而不是{{资产(' folder_name / image_name')}}}

{{ asset('5a46187d954de.png') }}

生成http://localhost/receiptGenerator2/public/5a46187d954de.png

答案 1 :(得分:0)

试试这个:

->attach(
   public_path('receiptGenerator2/public/5a46187d954de.png'), [
   'as' =>"attachment.png" ,
   'mime' => 'application/octet-stream',
]);

来源:https://laravel.com/docs/5.5/mail#attachments

编辑:由于您使用的是phpmail,这应该可以解决问题

 $mail->addAttachment(public_path($file), 'receiptFile', 'base64','application/octet-stream');

Mail需要完整路径,是的,您可以从浏览器中打开该URL中的文件,但phpmailer会尝试访问您磁盘中的http://localhost/receiptGenerator2/public/5a46187d954de.png,因此它会尝试从/ var / www / html获取该文件/ project / http://localhost/receiptGenerator2/public/5a46187d954de.png无效。

答案 2 :(得分:0)

the docs for addAttachment()所述,第一个参数必须是本地文件系统路径;如果你给它一个URL它将无法工作。 PHPMailer不是HTTP客户端 - 还有许多其他功能和库可以帮助解决这个问题,因此如果您需要从远程URL获取某些内容以用作附件,请使用它们。您不应该使用本地资源的localhost URL,因为它不必要地效率低下。