2017-01-23 1 views
1

Laravel 5.3Laravel 5.3 réponse() -> Télécharger - Fichier (.doc, .docx) devient illisible après avoir téléchargé

Lorsque je télécharge un fichier (.doc, .docx) de mon dossier de stockage, il devient illisible. Si je vais dans le dossier local et ouvre le fichier, il est valide et lisible.

J'utilise la fonction de téléchargement standard, en-têtes et des trucs .. Jetez un oeil à mon code:

$fileNameGenerate = 'example_filename'; 
$fileArr = [ 'wierd_filename', 'docx' ]; 
$cvPath = storage_path('app/example_folder/subfolder/wierd_filename.docx'); 

$headers = array(
    'Content-Type: application/' . $fileArr[1], 
); 

try { 


    return response()->download($cvPath, $fileNameGenerate . '.' . $fileArr[1], $headers); 


} catch (\Exception $e) { 
    //Error 
    return redirect()->back()->with('error', trans('locale.file_does_not_exists')); 
} 

Est-ce que quelqu'un sait ce qui ne va pas ici? Je vous remercie!

Mise à jour: J'ai supprimé les en-têtes, cela ne fonctionne pas avec ou sans eux.

Voici comment les fichiers rendent dans les 2 cas différents:

The second file - gone wrong

+0

Avez-vous essayé d'imprimer $ fileArr [1] et de vous assurer qu'il donne le bon type Mime? – Rahi

+0

Il n'est pas nécessaire de définir l'en-tête. Vous dites au navigateur de télécharger le fichier, supprimez-le. – Ohgodwhy

+0

@Rahi, oui le tableau est correct. En fait est doc, pas docx, mais il devrait encore fonctionner: tableau (0 => "c58ae31d925e486953c5f029bfcf8916", 1 => "doc") –

Répondre

0

Essayez cette fonction publique getDownload() {

// fichier doc est stocké sous StoragePath/télécharger/info.docx

$file= pathofstorage. "/download/info.docx"; 

return response()->download($file); 

}

+0

Non, cela ne fonctionne pas. Le fichier ne télécharge pas du tout, si j'appelle cette fonction d'une autre fonction. Si je change mes itinéraires à cette fonction, il commence le téléchargement et encore une fois - le fichier est illisible –

0

I ajouté:

ob_end_clean(); 

avant:

response -> download 

et cela a fonctionné pour moi.