首页 > 解决方案 > “无法打开文件进行阅读”将 PDF 从存储附加到可邮寄

问题描述

你好我现在有问题

我正在执行“将 PDF 自动附加到电子邮件页面”。它的工作原理是每行都有一个电子邮件按钮,单击该按钮时,用户将被重定向到页面,该页面会根据 ID 自动附加存储在存储文件夹中的 PDF。我试图对 PDF 进行死转,它以乱码显示 PDF 文件的内容,如果对 PDF 文件进行死转,我认为这是正常的。但是,我不断收到错误“无法打开文件进行读取”。这是我的代码:

控制器:

  public function sendToCompany(Request $request){

    $filename = request('attachedLetter');
    $letter = \Storage::get('public/coverLetter/'.$filename);


    $data = array(
        'email' => request('company_email'),
        'subject' => request('email_subject'),
        'message' => request('email_message'),
        'attachedLetter' => $letter
    );


        \Mail::to($data['email'])->send(new SendEmailToCompany($data['subject'], $data['message'], $data['attachedLetter']));
}

可邮寄:

public $content;

// public $attach;

/**
 * Create a new message instance.
 *
 * @return void
 */
public function __construct($subject, $content, $files)
{
    $this->subject = $subject;
    $this->content = $content;
    $this->attach = $files;
}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    $file = $this->attach;
    dd($file);
    return $this->markdown('email.emailToCompany')->attach($file);

}

任何帮助将不胜感激。谢谢你!

标签: phplaravel

解决方案


attach方法需要一个文件路径,而不是文件的内容。如果要附加存储中的文件,可以使用attachFromStorage. 如果要附加原始数据(文件内容),可以尝试使用该attachData方法。

Laravel 6.x 文档 - 邮件 - 编写 Mailables - 附件

您可以将传递给该方法的相同路径传递Storage::get给该attachFromStorage方法:

$path = 'public/coverLetter/'. $filename;

... SendEmailToCompany($data['subject'], $data['message'], $path) ...

然后在邮件中你可以尝试:

return $this->markdown('email.emailToCompany')->attachFromStorage($this->attach);

推荐阅读