我正在尝试使用Laravel将图像保存到我的MSSQL数据库(BLOB)中。
INSERT INTO EmployeeImages (EmplNr, Name, Image)
VALUES(1011, 'John Doe' , (SELECT * FROM OPENROWSET(BULK N'C:\mypath\John_Doe.jpg', SINGLE_BLOB) rs))
这适用于SQL Server Management Studio。
现在我想在Laravel 5.4中制作相同的插页。
我创建了一个模型和一个控制器。
模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Employee extends Model
{
protected $table = 'EmployeeImages';
protected $primaryKey = 'EmplNr';
public $timestamps = false;
protected $fillable = ['EmplNr', 'Name', 'Image'];
}
和控制器(存储方法):
public function store()
{
$file = request()->file('avatar');
$ext = $file->guessClientExtension();
$nameWithExt = request('name') . '.' . $ext;
$file->storeAs('avatars', $nameWithExt);
Employee::create([
'EmplNr' => request('emplNr'),
'Name' => request('name'),
'Image' => '' // what should i do here ?
]);
return back();
}
我试图做这样的事情:
Employee::create([
'EmplNr' => request('emplNr'),
'Name' => request('name'),
'Image' => 'SELECT * FROM OPENROWSET(BULK N"C:\mypath\ccup\storage\app\avatars\{$nameWithExt}", SINGLE_BLOB) rs'
]);
但这不起作用。有任何人知道如何解决它。我需要保存图像而不是数据库中的路径!
答案 0 :(得分:0)
在SQL Server上执行SQL时,工作的文件路径是该SQL Server磁盘上的映像。
如果你想这样做,那么你需要得到laravel来将可能上传的图像保存到SQL服务器上的已知位置。
你可能能够做到这一点,但这在很多方面都是个坏主意。尝试向SQL服务器发送一个字节数组,而不是图像数据 - 请参阅How to Store and Retrieve Image in SQL Server VARBINARY(MAX) datatype以获取示例