我正在做一个laravel项目,在项目中我存储了以下内容 .pdf
文件到我的本地phpmyadmin,然后检索回来在浏览器中显示。
我看到一些应用程序,但它们保存的是 .pdf
文件在本地,同时上传到DB。然后,它变得如此容易显示与 <img src="">
但我不想用这个。
这些是我的路线。
Route::get('/users/{user}/posts', 'PostController@index');
Route::get('/posts/create', 'PostController@create');
Route::post('/posts', 'PostController@store');
和索引功能。
public function index(User $user, Post $posts)
{
$posts = DB::table('posts')
->where('userId', '=', $user->id)
->get();
return view('post.index', compact('posts'));
}
我可以上传和存储 .pdf
所以我想通过PostController中的索引功能获取记录(已经完成),然后在浏览器中显示出来。.pdf
在index.blade.php文件中的文件,它来自db.这样。http://localhost/test.pdf
当我在浏览器中显示这个文件时 我只能看到它的名字 我怎样才能读取从db.like.得到的文件呢?db
谢谢您的回答。
首先,在我看来,你应该将文件存储到 laravel的存储系统 而不是在数据库中。
但如果你想在数据库中进行操作,这里有一个例子,可以输出一个文件,这个文件存储在数据库的blob字段中(例如在数据库的 content
的领域 files
表)。)
另一个不那么漂亮的方法是把文件转换成一个叫做 base64
字符串并存储在文本字段中。查看更多.
db_files "表的模式。
field | type
----------|-------------
id | BIGINT
name | VARCHAR(255)
content | BLOB
mime_type | VARCHAR(255)
路线
Route::get('/files/{id}', 'FileController@show')->name('file.show');
DbFile模型
use Illuminate\Database\Eloquent\Model;
class DbFile extends Model {
// ...
}
FileController
public function show($id) {
$dbFile = DbFile::firstOrFail($id);
// the $dbFile->mime_type should be 'application/pdf' for pdf files
// the $dbFile->name should be in this schema 'document.pdf'
return response($dbFile->content)
->withHeaders([
'Content-type: ' . $dbFile->mime_type,
'Content-Disposition: attachment; filename=' . $dbFile->name
]);
}
查看
<a href="{{ route('file.show', ['id' => 1]) }}" target="_blank">Show Document</a>
我现在无法测试代码。如果有什么问题,请告诉我。
我有一个方法可以解决这个问题,把文件的扩展名从 pdf
到 pdfz
或任何其他扩展,并使用此代码
$realPath="path file with pdfz extension";
if(file_exists($realPath)){
$realPath=str_replace(".pdf",".pdfz",$realPath);
$file =$realPath;
$filename = $realPath;
header('Content-type: application/pdf');
header('Content-Disposition: inline; filename="' . $filename . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Accept-Ranges: bytes');
@readfile($file);
exit;
}else{
echo "$realPath:No File Exist";
}
改变扩展的目的是为了 防止强行下载 由 IDM