【问题标题】:"Unable to open file for reading" attaching PDF from storage to mailable“无法打开文件进行阅读”将 PDF 从存储附加到可邮寄
【发布时间】:2019-10-21 10:06:09
【问题描述】:

你好,我现在有问题

我正在执行“将 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);

}

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

【问题讨论】:

    标签: php laravel


    【解决方案1】:

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

    Laravel 6.x Docs - Mail - Writing Mailables - Attachments

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

    $path = 'public/coverLetter/'. $filename;
    
    ... SendEmailToCompany($data['subject'], $data['message'], $path) ...
    

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

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

    【讨论】:

    • 我尝试过使用 storage_path(),如果我在邮件中死转,它会显示路径,但“无法打开文件进行读取”错误仍然存​​在
    • 我得到了“/Applications/XAMPP/xamppfiles/htdocs/newmanagementsystem/storage/coverLetter/LetterOffer_1.pdf”
    • 有一种专门用于从存储系统中附加文件的方法,您为什么不使用呢? ..您拥有的那个字符串与您从Storage::get询问的文件不同,它缺少“公共”部分并且其中也没有“应用程序”...但是您告诉如果你认为你那里的文件路径存在,我会告诉你
    • 是否可以在可邮寄的构造函数中执行“this->attachFromStorage”?因为我将 HTML 文件中的文件名传递给控制器​​,在 Mail:to 的最后一个参数中,它将文件名传递给可邮寄文件
    • 只需传递路径,与传递给Storage::get 的完全相同的路径,将attach 更改为attachFromStorage 并将该路径传递给它...如果您查看文档中的示例它甚至在使用 pdf
    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 2018-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多