我有存储在S3上的文件,我希望能够强制下载它们。
出于这个目的,我想出了以下路线:
Route::get('/download/{link}','HomeController@download');
和控制器功能:
public function download(Request $request, $link){
$filename = 'S3 FILE';
$tempImage = tempnam(sys_get_temp_dir(), $filename);
copy($link, $tempImage);
return response()->download($tempImage, $filename);
}
查看:
<a href="/download/{{url($uploads[0]->txtURL)}}" download="download">Download</a>
我不知道为什么当我点击链接时文件没有下载而是我得到了
找不到文件
Firefox无法找到该文件 http://learn-laravel.dev/download/https://bbbucket.s3.eu-west-2.amazonaws.com/ *******。TXT。
任何人都可以帮我解决问题吗?我想要做的是force download
S3链接上的文件。
答案 0 :(得分:2)
在我的解决方案之下
路由
Route::get('/download','HomeController@download');
控制器
public function download() {
//get url from request
$link = request()->input('url');
$filename = 'S3 FILE';
$tempImage = tempnam(sys_get_temp_dir(), $filename);
copy($link, $tempImage);
return response()->download($tempImage, $filename);
}
请求
http://learn-laravel.dev/download/?url=https://bbbucket.s3.eu-west-2.amazonaws.com/*******.txt
请记住使用相对于url参数的urlencode
http://learn-laravel.dev/download/?url=https%3A%2F%2Fbbbucket.s3.eu-west-2.amazonaws.com%2F%2A%2A%2A%2A%2A%2A%2A.txt
查看
<a href="{{ route('download') }}?url={{ urlencode($uploads[0]->txtURL) }}" download="download">Download</a>
答案 1 :(得分:0)
我不知道为什么当我点击链接时文件没有下载但是我得到了...
您需要使用nsdManager.registerService(serviceInfo, NsdManager.PROTOCOL_DNS_SD, new NsdManager.RegistrationListener() {...});
帮助程序对您的请求进行编码。
url()
注意:网址必须是完全限定的网址,才能将其发送到其他地方。
<a href="{{ url('https://path/to/s3/file') }}">Download S3 file.</a>
函数生成指定路径的完全限定URL。
因此,如果给定url
生成url('/posts')
。
鉴于http://localhost:8000/posts
生成url('http://yourdomain.com/about')
。
而不是:
http://yourdomain.com/about
尝试:
<a href="/download/{{url($uploads[0]->txtURL)}}" download="download">Download</a>
注意: <a href="{{ url($uploads[0]->txtURL) }}">Download</a>
需要格式化的内容:scheme://domain/path。