Response :: download를 사용하여 laravel에서 파일 다운로드
Laravel 애플리케이션에서 사용자가 다른보기 또는 경로로 이동하지 않고 파일을 다운로드 할 수있는보기 내부 버튼을 얻으려고합니다. 이제 두 가지 문제가 있습니다. (1) 아래 함수 던지기
The file "/public/download/info.pdf" does not exist
(2) 다운로드 버튼은 사용자를 어디로 든 이동하지 않고 동일한보기, 내 현재 설정에서 파일을 다운로드하고보기를 '/ 다운로드'로 라우팅해야합니다.
내가 달성하려는 방법은 다음과 같습니다.
단추:
<a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>
노선 :
Route::get('/download', 'HomeController@getDownload');
컨트롤러 :
public function getDownload(){
//PDF file is stored under project/public/download/info.pdf
$file="./download/info.pdf";
return Response::download($file);
}
이 시도.
public function getDownload()
{
//PDF file is stored under project/public/download/info.pdf
$file= public_path(). "/download/info.pdf";
$headers = array(
'Content-Type: application/pdf',
);
return Response::download($file, 'filename.pdf', $headers);
}
"./download/info.pdf"
완전한 물리적 경로를 제공해야하므로 작동하지 않습니다.
업데이트 2016 년 5 월 20 일
Laravel 5, 5.1, 5.2 또는 5. * 사용자는 Response
파사드 대신 다음 방법을 사용할 수 있습니다 . 그러나 이전 답변은 Laravel 4 또는 5 모두에서 작동합니다 ( $header
배열 구조가 연관 배열로 변경됨 =>
- 'Content-Type'이 삭제 된 후 콜론-이러한 변경을하지 않으면 헤더가 잘못된 방식으로 추가됩니다 : 헤더의 이름은 0,1, ...에서 시작하는 번호입니다.)
$headers = [
'Content-Type' => 'application/pdf',
];
return response()->download($file, 'filename.pdf', $headers);
Laravel 5 에서는 파일 다운로드가 매우 간단 합니다.
@Ashwani가 언급했듯이 Laravel 5는 파일 다운로드 를 허용하여 파일 다운로드response()->download()
를 반환합니다. 더 이상 헤더를 엉망으로 만들 필요가 없습니다. 파일을 반환하려면 간단히 :
return response()->download(public_path('file_path/from_public_dir.pdf'));
컨트롤러 내에서.
재사용 가능한 다운로드 경로 / 컨트롤러
이제 재사용 가능한 파일 다운로드 경로와 컨트롤러를 만들어 public/files
디렉토리에 있는 모든 파일을 서버로 올릴 수 있습니다 .
컨트롤러 만들기 :
php artisan make:controller --plain DownloadsController
에서 경로를 만듭니다 app/Http/routes.php
.
Route::get('/download/{file}', 'DownloadsController@download');
다음에서 다운로드 방법을 만드십시오 app/Http/Controllers/DownloadsController
.
class DownloadsController extends Controller
{
public function download($file_name) {
$file_path = public_path('files/'.$file_name);
return response()->download($file_path);
}
}
이제 public/files
디렉토리에 일부 파일을 놓기 만하면 /download/filename.ext
다음 링크를 통해 서버에 연결할 수 있습니다 .
<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"
Laravel Collective의 Html 패키지 를 가져온 경우 Html 파사드를 사용할 수 있습니다.
{!! Html::link('download/filename.ext', 'File Name') !!}
받아 들여진 대답에서 Laravel 4의 경우 헤더 배열이 잘못 구성되었습니다. 사용하다:
$headers = array(
'Content-Type' => 'application/pdf',
);
Quite a few of these solutions suggest referencing the public_path() of the Laravel application in order to locate the file. Sometimes you'll want to control access to the file or offer real-time monitoring of the file. In this case, you'll want to keep the directory private and limit access by a method in a controller class. The following method should help with this:
public function show(Request $request, File $file) {
// Perform validation/authentication/auditing logic on the request
// Fire off any events or notifiations (if applicable)
return response()->download(storage_path('app/' . $file->location));
}
There are other paths that you could use as well, described on Laravel's helper functions documentation
While using laravel 5
use this code as you don`t need headers.
return response()->download($pathToFile);
.
If you are using Fileentry
you can use below function for downloading.
// download file
public function download($fileId){
$entry = Fileentry::where('file_id', '=', $fileId)->firstOrFail();
$pathToFile=storage_path()."/app/".$entry->filename;
return response()->download($pathToFile);
}
// Try this to download any file. laravel 5.*
// you need to use facade "use Illuminate\Http\Response;"
public function getDownload()
{
//PDF file is stored under project/public/download/info.pdf
$file= public_path(). "/download/info.pdf";
return response()->download($file);
}
I think that you can use
$file= public_path(). "/download/info.pdf";
$headers = array(
'Content-Type: ' . mime_content_type( $file ),
);
With this you be sure that is a pdf.
This is html part
<a href="{{route('download',$details->report_id)}}" type="button" class="btn btn-primary download" data-report_id="{{$details->report_id}}" >Download</a>
This is Route :
Route::get('/download/{id}', 'users\UserController@getDownload')->name('download')->middleware('auth');
This is function :
public function getDownload(Request $request,$id)
{
$file= public_path(). "/pdf/"; //path of your directory
$headers = array(
'Content-Type: application/pdf',
);
return Response::download($file.$pdfName, 'filename.pdf', $headers);
}
참고URL : https://stackoverflow.com/questions/20415444/download-files-in-laravel-using-responsedownload
'developer tip' 카테고리의 다른 글
옵션을 변환하는 방법 (0) | 2020.12.06 |
---|---|
모든 CALayer의 하위 계층 제거 (0) | 2020.12.06 |
iOS의 동영상 URL 또는 데이터에서 미리보기 이미지 가져 오기 (0) | 2020.12.06 |
CSS로 테이블의 마지막 td 스타일 지정 (0) | 2020.12.06 |
이름이 유효한 식별자가 아니기 때문에 exec가 실패 했습니까? (0) | 2020.12.06 |