Je télécharge des fichiers sur Amazon S3 avec le système de fichiers Laravel. Le processus de téléchargement fonctionne très bien, mais lorsque je télécharge les fichiers sont corrompus. J'ai téléchargé manuellement les fichiers depuis le seau S3 et de cette façon les fichiers ne sont pas corrompus, donc j'ai pensé que le problème n'était pas le téléchargement.
Je télécharge les fichiers comme suit :
/**
* Upload the file to Amazon S3.
*
* @param UploadedFile $file
* @param $path
* @return $this|bool
*/
protected function upload(UploadedFile $file, $path)
{
$this->filename = $path . '/' . time() . '_' . str_replace(' ', '-', $file->getClientOriginalName());
$disk = Storage::cloud();
if ($disk->put($this->filename, fopen($file, 'r+'))) {
$this->save();
return $this;
}
return false;
}
Et pour le téléchargement, j'ai essayé ceci :
/**
* @param Document $document
* @return Response
*/
public function download(Document $document)
{
$file = Storage::cloud()->get($document->path);
$file_info = new finfo(FILEINFO_MIME_TYPE);
return response($file, 200)->withHeaders([
'Content-Type' => $file_info->buffer($file),
'Content-Disposition' => 'inline; filename="' . $document->name . '"'
]);
}
Et ceci :
/**
* @param Document $document
* @return Response
*/
public function download(Document $document)
{
$stream = Storage::cloud()->getDriver()->readStream($document->path);
$file = stream_get_contents($stream);
$file_info = new finfo(FILEINFO_MIME_TYPE);
return response($file, 200)->withHeaders([
'Content-Type' => $file_info->buffer($file),
'Content-Disposition' => 'inline; filename="' . $document->name . '"'
]);
}
Avec les deux fonctions de téléchargement, j'obtiens les fichiers, mais ils sont corrompus. Toute aide est la bienvenue !