2014-11-17 16 views
8

Tôi gặp sự cố khi tạo liên kết tải xuống để tải xuống tệp qua Ứng dụng dành cho thiết bị di động từ thư mục Bộ nhớ Laravel.Cách tạo liên kết tải xuống trong Laravel

Tôi đã làm một cái gì đó như $link = Response::Download(storage_path()./file/example.png) nhưng vô ích.

Tôi đã chuyển tệp vào thư mục công khai và sử dụng http://domain.com/file/example.pngasset('file/example.png') nhưng không có kết quả.

Tôi nhận 404 NOT FOUND ERROR

Làm thế nào để giải quyết này?

+0

Bạn có muốn liên kết trực tiếp đến tập tin thực tế (trong thư mục công cộng) hay bạn muốn hành động của tuyến đường/bộ điều khiển buộc tải xuống? – lukasgeiter

+0

Tuyến đường/bộ điều khiển sẽ thực hiện, bro – BlackPearl

Trả lời

19

Hãy xem tài liệu Laravel Helpers: http://laravel.com/docs/4.2/helpers

Nếu bạn muốn có một liên kết đến tài sản của bạn, bạn có thể làm điều đó như thế này:

$download_link = link_to_asset('file/example.png'); 

Sửa

Nếu phương pháp trên không phù hợp với bạn, bạn có thể thực hiện một tuyến Tải xuống khá đơn giản trong app/routes.php mà trông như thế này:

Note ví dụ này giả định tập tin của bạn được đặt tại ứng dụng/lưu trữ/file/ vị trí

// Download Route 
Route::get('download/{filename}', function($filename) 
{ 
    // Check if file exists in app/storage/file folder 
    $file_path = storage_path() .'/file/'. $filename; 
    if (file_exists($file_path)) 
    { 
     // Send Download 
     return Response::download($file_path, $filename, [ 
      'Content-Length: '. filesize($file_path) 
     ]); 
    } 
    else 
    { 
     // Error 
     exit('Requested file does not exist on our server!'); 
    } 
}) 
->where('filename', '[A-Za-z0-9\-\_\.]+'); 

Cách sử dụng: http://your-domain.com/download/example.png

Điều này sẽ tìm một tập tin trong: app/storage/file/example.png (nếu nó tồn tại, gửi tập tin đến trình duyệt/máy khách, nếu không nó sẽ hiển thị thông báo lỗi).

P.S. '[A-Za-z0-9\-\_\.]+ cụm từ thông dụng này đảm bảo người dùng chỉ có thể yêu cầu tệp có tên A-Z hoặc a-z (chữ cái), 0-9 (số), - hoặc _ hoặc . (biểu tượng). Mọi thứ khác bị loại bỏ/bỏ qua. Đây là một biện pháp an toàn/an ninh ....

+0

Tôi đã thử cách này trước và nó cũng không hoạt động. Tôi đang tải xuống với dịch vụ nền trong Android. – BlackPearl

+0

@BlackPearl Liên kết có hoạt động trong trình duyệt web không? – lukasgeiter

+0

Không, nó không. – BlackPearl

3

Đang cập nhật câu trả lời cho Laravel 5.0 trở lên:

<a href={{ asset('file/thing.png') }}>Thing</a>

+0

Tôi có một tập tin trong lưu trữ/app/thư mục công cộng.Liên kết của tôi đang theo dõi Read Paper. Nhưng khi tôi nhấp vào liên kết nó nói "không tìm thấy execption" –

+0

Hi @MutasimFuad thư mục 'lưu trữ' không được sử dụng cho các tài sản công cộng, nó thực sự cho lưu trữ nội bộ như các bản ghi của bạn. Thư mục bạn nên lưu trữ các tài sản công của bạn nằm trong '/ public /' nằm trong thư mục gốc của dự án của bạn. –

+0

Xin chào, @DylanPierce! nếu tôi muốn các tệp được mở chỉ bởi những người đăng nhập vào ứng dụng của tôi, tôi có nên sử dụng/công khai/không? (Tôi đã xác thực phần mềm trung gian rồi) –

Các vấn đề liên quan