2017-05-09 4 views
0

public/files 디렉토리에 일부 파일이있는 laravel 응용 프로그램을 빌드했습니다. 나는 그런 다운로드 링크와 같은 다른 사람에게이 링크를 제공하는 경우, 그들은 내가디렉토리를 제공하면서 디렉토리를 숨기는 방법 Link?

www.abc.com/files/45454553535.zip 

로 다운로드 링크를 제공 할 수있는 링크를 가정 .. 을 내 디렉토리를 알 수있는 기회를하지만 난 사용자 있음을 알려 싶지 않아 파일 디렉토리에 있습니다. 어떻게 디렉토리를 숨기나요?

+0

[Laravel : url 매개 변수를 숨기는 방법?] 가능한 복제본 (http://stackoverflow.com/questions/39951509/laravel-how-to-hide-url-parameter) –

답변

0

나는이 일을하거나하지하지만 당신에게 아이디어를주는 것인지 모른다 :

은 설명서를 따라하려고합니다. 다음과 같이 PHP 파일을 만드십시오 :

header('Content-Type: application/zip'); 
$a=file_get_contents(file.zip) 
echo $a; 

이 사용자는 내용을 가져 오는 위치를 알 수 없습니다.

0

시도해보십시오.

public function getDownload() 
    { 
$filename='45454553535.zip' 
     $file= public_path(). "/files/".$filename; 

     $headers = array(
        'Content-Type: application/zip', 
       ); 

     return Response::download($file, $filename, $headers); 
    } 

".files/45454553535.zip"은 완전한 실제 경로를 제공해야하므로 작동하지 않습니다.

업데이트 20/05/2016

Laravel 5, 5.1, 5.2 또는 5. * 사용자는 응답 외관 대신 다음과 같은 방법을 사용할 수 있습니다. 그러나 이전 답변은 Laravel 4 또는 5 모두에서 작동합니다.

return response() -> download ($ file, $ filename, $ headers);

+0

링크는 어떻게됩니까? 이것은 컨트롤러 기능에 관한 것입니까? – User57

+0

당신이 원하는 파일과 파일 이름 그래서 당신은 다운로드하고자하는 파일을 알고 있습니다. –

0

컨트롤러와 경로를 만들면됩니다.

Route::get('files/{filename}', [ 
    'as' => 'file.get', 
    'uses' => '[email protected]', 
]); 

컨트롤러에서 올바른 디렉토리를 확인해야합니다. 공개 경로가 아닌 저장 경로에 파일을 보관하십시오. your-domain.com/files/45454553535.zip :

{{ route('file.get', ['filename' => '45454553535.zip') }} 

이 작업은 링크처럼 보이는 생성 :

class FileController extends Controller 
{ 
    private $path; 

    public function __construct() 
    { 
     $path = storage_path() 
      . '/your-valid-directory/'; 
    } 

    public function get($filename) 
    { 
     $file_path = $this->path 
      . filter_var($filename, FILTER_SANITIZE_STRING); 

     if (file_exists($file_path) && is_readable($file_path)) { 
      return response(file_get_contents($file_path), 200, [ 
       'Content-Type: application/zip', 
      ]); 
     } else { 
      abort(404); 
     } 
    } 
} 

이제 당신은에 의해 특정 파일에 대한 액세스를 얻을 수 있습니다. :)

어쨌든 제 의견으로는 - 미래에는 특정 헤더, 디렉토리가있는 파일 공장을 만드십시오.

행운을 빈다.