Giriş yapmadınız.

#1 22.05.2019 15:51:03

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 164

Doğru dosya indirme yöntemi

Selamlar her gün bir konu açıyorum artık kızacaksınız big_smile

Dosya indirmenin doğru yöntemiyle ilgili yardımınıza ihtiyacım var, ben bi kaç yöntem denedim önce onları yazmak istiyorum

1- Dosya yolunu linke göndererek

 // Controller
$file = Storage::url('uploads/file.jpg');

// Html
<a href="{{$file}}" target="_blank">indir</a>

2- Storage in download methodunu kullanarak (dosya iniyor ama ben burada yine de bu methodu yanlış kullanıyor olabilirim)

// Rut
Route::get('indir/{path?}', '[email protected]')->name('download')->where('path', '.*');

// Html
<a href="{{route('download', ['path' => $path])}}" target="_blank">indir</a>

// Controller
return Storage::disk('public')->download($path);

3- http response ile

En doğru yöntem Storage::download() methodu olduğunu sanıyorum, laravel bunu yapmış ve dökümantasyona koymuş ama ben o methodu yanlış kullanıyor olabilir miyim, yani download rutu o anki sayfadan indir linke gidip geri dönüyor ve dosya isimleri linkte görünmüyor ?

Son düzenleyen neri (22.05.2019 15:52:46)

Çevrimdışı

#2 22.05.2019 16:28:27

deathisonitsway
Üye
Kayıtlı: 01.02.2016
Mesajlar: 463

Yanıt: Doğru dosya indirme yöntemi

/**
     * Create a streamed response for a given file.
     *
     * @param  string  $path
     * @param  string|null  $name
     * @param  array|null  $headers
     * @param  string|null  $disposition
     * @return \Symfony\Component\HttpFoundation\StreamedResponse
     */
    public function response($path, $name = null, array $headers = [], $disposition = 'inline')
    {
        $response = new StreamedResponse;

        $disposition = $response->headers->makeDisposition($disposition, $name ?? basename($path));

        $response->headers->replace($headers + [
            'Content-Type' => $this->mimeType($path),
            'Content-Length' => $this->size($path),
            'Content-Disposition' => $disposition,
        ]);

        $response->setCallback(function () use ($path) {
            $stream = $this->readStream($path);
            fpassthru($stream);
            fclose($stream);
        });

        return $response;
    }

nefis yapılmış işte daha ne istiyorsun smile

Yalnız path belirtmek zorundasın.

Storage::download('foo.jpg');

gibi...


Laravel does not save you. Php knowledge only save you. Do not become a Laravel programmer, just the opposite,become php developer.

Çevrimdışı

#3 22.05.2019 17:03:10

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,675
Website

Yanıt: Doğru dosya indirme yöntemi

İkinci yöntemin avantajı;
- Sadece üyelerin indirmesini sağlayabilirsiniz
- IP bazlı sınırlama getirebilirsiniz
- Geçici olarak indirmeye kapatabilirsiniz.
- İndirme hızını sınırlayabilirsiniz.
- İsteğe göre farklı bir işlem yaptırabilirsiniz.
- İndirme linkini değiştirmeden dosya konumunu değiştirebilirsiniz.

O yüzden ben genellikle 2. yolu tercih ederim.

Çevrimdışı

#4 22.05.2019 17:36:07

neri
Üye
Kayıtlı: 24.07.2018
Mesajlar: 164

Yanıt: Doğru dosya indirme yöntemi

@deathisonitsway @mgsmus üstatlar çok teşekkür ederim sizlere.

Çevrimdışı

Forum alt kısmı