Невозможно открыть файл для чтения [ссылка на файл] laravel

#laravel #laravel-mail

#laravel #laravel-почта

Вопрос:

Я пытаюсь отправить письмо нескольким получателям с вложением URL-адреса файла, но при нажатии на api в postman выдает ошибку невозможно открыть файл для чтения [ссылка на файл] , но пока я копирую ссылку на файл и открываю в браузере, он открывается отлично.

Я также проверил разрешение файла и сослался на некоторые ответы на Stackoverflow, но мне ничего не помогло, пожалуйста, помогите мне как можно скорее.

введите описание изображения здесь

         $file_name = 'TimeActivityReport' . "_" . time() . '.pdf';
        $storage_path = 'public/TimeActivityReport';
        // $storage_path = public_path();
        
        $filePath = $storage_path . '/' . $file_name;
        // return $filePath;
        $exl = Excel::store(new TimeActivityReportExport($all_total_values,$data,$date_totals), $filePath);
        if($exl)
        {
        $fileurl = asset('storage/TimeActivityReport').'/'.$file_name;
        // return $fileurl;
        }
// return $fileurl;
       return Mail::send([], $emails, function($message)use($fileurl,$emails) {
            $message->to($emails,'hello')
            ->subject('test')
            ->attach($fileurl,[
                'as' => 'checkname.pdf', 
                'mime' => 'application/pdf'
            ])
            ->setBody('check');
            });
  

Комментарии:

1. попробуйте dd( file_exists(asset(‘storage / TimeActivityReport/YOUR_FILE_NAME’))); и посмотрите, что вы получите?

2. отображается false, но файл существует внутри ‘storage / app / public / TimeActivityReport / file_name’

3. Попробуйте изменить этот ресурс (‘storage / TimeActivityReport’) на ресурс (‘TimeActivityReport /’.$имя_файла) и dd() его снова. проблема с вашим URL-адресом, также что вы получите, если вы dd(asset(‘TimeActivityReport /’.$file_name));

4. снова отображается false

5. assets выдает вам URL http -адрес, вам нужно указать системный каталог.

Ответ №1:

Попробуйте это, я проверил это на своем конце, и он вернул файл

 Storage::get('./public/TimeActivityReport/'.$file_name);
  

Вы также можете проверить, существует ли файл с помощью:

 Storage::disk('local')->exists('public/TimeActivityReport/'.$file_name);
  

Чтобы прикрепить, попробуйте:

 $fileurl = Storage::path('public/TimeActivityReport/'.$file_name);
  

ресурс laravel docs

Комментарии:

1. я попробовал это, и он возвращает файл, но запрос заключается в том, что при прикреплении URL-адреса файла к методу attach () во время отправки почты отображается ошибка, из-за которой невозможно открыть файл для чтения

2. самая большая разница в том, что я заменил ‘storage /’ на ‘public /’

3. Большое вам спасибо, наконец-то $fileurl = Storage::path(‘public/ TimeActivityReport/’.$file_name); это сработало для меня еще раз спасибо

4. Это приятно, просто не забудьте отметить как ответ, если это был ответ @kishanmaharana