skip to Main Content

I want to let user to download some file from storage path. In this case will be some backups they have made. So i have a method can create backups and show on vue js table. And now i am trying to downlaod manyally from vue

<tr v-show="backups.length" v-for="backup in backups" :key="backup.id">
                        <td>{{backup.path}}</td>
                        <td>{{backup.size}} KB</td>
                        <td>
                            <v-button type="sm-secondary" title="Download" @click="downloadBackup(backup.path)">
                                <i class="fa-solid fa-download"></i>
                            </v-button>
                        </td>
                    </tr>

methods: {
    downloadBackup(path) {
            axios.get('/download-backup-system/'+path)
            .then(response => {
                console.log(response)
            })
            .catch(error => {
                console.log(error)
            })
        }
}

//dd($Filepath);
//RETURN
//"C:...storageapp/Backup/2022-11-28-10-21-27.zip"

Laravel controller

public function downloadBackups($path)
    {
        $Filepath = storage_path('app/Backup/'.$path);
        if (file_exists($Filepath)) {
            return Response::download($Filepath);
        }
    }

But this does not work and on response i get something like this

PK�.�&_���vt�8̩��....

Also i have tryed this https://stackoverflow.com/questions/48534837/how-to-download-zip-file-through-browser-laravel method, but does not work for me

2

Answers


  1. i also had a problem at first with downloading files from the storage. i solved it this way

    i made a Crud, And foreach row i added a Download button. When clicked this button went to a custom function in my controller with the (fileId).

    public function download(Request $request, int $fileId)
    // $fileId is the id from the download button
    {
            $fullfile = File::find($fileId);
            $downloadfile = File::find($fullfile, ['file'])->pluck('file')->last();
    
      return response()->download($downloadfile);
    
    }
    
    Login or Signup to reply.
  2. You’re trying to download a file through AJAX. Its probably easier to make a link a with the download path as href:

    <tr v-show="backups.length" v-for="backup in backups" :key="backup.id">
        <td>{{backup.path}}</td>
        <td>{{backup.size}} KB</td>
        <td>
            <a :href="`/download-backup-system/` + backup.path">
                Download <i class="fa-solid fa-download"></i>
            </a>
        </td>
    </tr>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search