【发布时间】:2018-06-13 15:10:18
【问题描述】:
我在 Laravel 5.6 中有一个 REST API
用户可以将他们的文件上传到非公共文件夹中。
我的问题是,现在我只想让用户下载文件,前提是 JWT 令牌有效并且用户具有正确的权限。
我的实际代码如下:
jquery:
$.ajaxSetup({
headers: {
'Authorization': 'Bearer ' + token
});
$.get('/api//download?' + $.param({
file: encodeURIComponent(fileNonPublicPath) //e.g. company_id/file.pdf
}))
.done((data) => {
console.log('file content', data);
})
.fail((err) => {
console.error(err);
});
Laravel 控制器:
$file = urldecode($request->input('file'));
$user = JWTAuth::toUser($request->token);
if(checkUserRole($user,$file){
$pathToFile = Storage::disk('documents')->getDriver()->getAdapter()->applyPathPrefix($file);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $pathToFile);
finfo_close($finfo);
$headers = array('Content-Type' => $mime,);
return response()->download($pathToFile, 'originalfilename', $headers);
}
return response()->json([], 403); //forbidden
此代码工作正常,只是浏览器以 ajax 格式接收文件内容,然后用户无法下载。
有什么解决方案不影响存储文件的安全性?
【问题讨论】:
标签: php jquery ajax laravel-5 download