我尝试使用Laravel Storage Facade将文件上传到临时位置,并且说该文件不存在。我试图将文件上传到./storage/app/roofing/projects/{id}/then文件。我不确定我在哪里出错了。
foreach ($files as $file) {
$path = Storage::putFile('contract-assets', new File('../storage/app/roofing/projects/'. $project->id.'/'. $file));
}
我必须在将文件存储在我的本地服务器上之后将文件发送到AWS S3,因为尝试直接上传到S3需要一些时间,在我的情况下,由于需要存储的文件数量,它需要时间。截至目前,我所有的回复在我的dd()中都是正确的。可能是什么原因造成的?
if (!empty($request->contract_asset)) {
$files = $request->file('contract_asset');
foreach ($files as $file) {
Storage::putFile(Carbon::now()->toDateString().'/roofing/projects/'. $project->id.'/contract-assets', $file);
}
}
foreach (Storage::files(Carbon::now()->toDateString().'/roofing/projects/'.$project->id.'/contract-assets') as $file) {
dispatch(new ProcessRoofingProjectContractAssets($file, $project));
}
我的工作档案。
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$path = Storage::disk('s3')->put('contract-assets', $this->asset, 'public');
dd($path);
$this->project->addContractAsset($path);
}
更新
这些是我当前的更改,我收到以下错误消息。 Failed because Unable to JSON encode payload. Error code: 5
foreach ($files as $file) {
$returnedStoredFile = Storage::putFile('/roofing/projects/' . $project->id . '/contract-assets/'.Carbon::now()->toDateString(), $file);
dispatch(new ProcessRoofingProjectContractAssets(Storage::get($returnedStoredFile), $project));
}
答案 0 :(得分:4)
您不应该将整个文件作为参数传递给您的作业。 Laravel会对它进行序列化,而且内存效率极低。 (可能在此序列化过程中您现在遇到此问题 - 失败,因为无法对JSON编码有效负载。错误代码:5 )
我假设您在临时文件夹中没有上传问题,而且您在分派作业(或执行作业)时遇到问题。
编辑作业以接收文件路径作为参数。只有在执行作业时,您才能进入磁盘并阅读它。
调度工作:
Replace(rng, ",", ".")
执行它:
foreach ($files as $file) {
$returnedStoredFile = Storage::putFile('/roofing/projects/' . $project->id . '/contract-assets/'.Carbon::now()->toDateString(), $file);
dispatch(new ProcessRoofingProjectContractAssets($returnedStoredFile, $project));
}