如何使用Laravel 5在MSSQL中保存图像

时间:2018-01-08 15:19:14

标签: php sql-server laravel

我正在尝试使用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' 

]);  

但这不起作用。有任何人知道如何解决它。我需要保存图像而不是数据库中的路径!

1 个答案:

答案 0 :(得分:0)

在SQL Server上执行SQL时,工作的文件路径是该SQL Server磁盘上的映像。

如果你想这样做,那么你需要得到laravel来将可能上传的图像保存到SQL服务器上的已知位置。

你可能能够做到这一点,但这在很多方面都是个坏主意。尝试向SQL服务器发送一个字节数组,而不是图像数据 - 请参阅How to Store and Retrieve Image in SQL Server VARBINARY(MAX) datatype以获取示例