Сохранить файл изображения на диске из данных изображения в таблице SQL

У меня есть таблица SQL, которая хранит изображения в формате varbinary. Я хочу взять данные изображения из таблицы SQL и сохранить их как файл изображения в моей системе.

$getPhotos = "SELECT Name, PhotoContent
              FROM [Photos]";                 
$resultPhotos = odbc_exec($con, $getPhotos);

while($post = odbc_fetch_array($resultPhotos)){
    $fileData = $post['PhotoContent'];
    $fileName = "D:\\Images\\".$post['Name'];
    file_put_contents($fileName,str_replace('data:image/jpeg;base64,','',$fileData));
}

Приведенный выше код сохраняет файл изображения в системе, но сохраненное изображение повреждено.

Как мне исправить эту проблему?

Спасибо

2 ответа

На сервере MySQL вы можете использовать этот код:

using MySql.Data.MySqlClient;
using System.IO;
using System.Globalization;

int i=0; //variable for image name

MySqlConnection conn = new MySqlConnection("SERVER=127.0.0.1;DATABASE=test;UID=root;PASSWORD=1234");
conn.Open();
MySqlCommand cmd = new MySqlCommand("SELECT signature  FROM  imageTble  ", conn);
MySqlDataReader myReader = null;
myReader = cmd.ExecuteReader();

byte[] imgg = (byte[])(myReader["signature"]);

while (myReader.Read())
{
    i = i + 1;
    File.WriteAllBytes(@"C:\Users\Admin\Desktop\New folder\IMAGES\" + i + ".tiff", imgg);
}

Если вы используете базу данных MS SQl, вы можете использовать:

using System.Data.Sql; 

ссылка и подержанный sqlkeyword insta of MYSql

Eg----> SqlConnection, SqlCommand,SqlDataReader

Хорошо, вы можете сделать все это в MS SQL. Поскольку я ничего не знаю о PHP.

Итак, сначала это моя таблица ниже. введите описание изображения здесь

1) Создайте файл формата blob, чтобы вы могли экспортировать его.

    DECLARE @sql VARCHAR(500)
    SET @sql = 'bcp DatabaseName.dbo.Blob format nul -T -n -f C:\Users\Public\Documents\blob.fmt -S ' + @@SERVERNAME
    SELECT @sql 
    EXEC master.dbo.xp_CmdShell @sql 

Формат файла Формат файла

2) Отредактируйте файл формата. Оставьте только столбец содержимого.

2.1) Оригинальный формат введите описание изображения здесь

2.2) Измените формат, как показано ниже введите описание изображения здесь

3) Наконец, я создал хранимую процедуру, которая изменит все varbinary данные на.jpb (вы также можете иметь их в другом формате, а не только в.jpg).

CREATE PROCEDURE BLOBImageExport

AS

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
SET NOCOUNT ON

IF OBJECT_ID('tempdb..#export') IS NOT NULL DROP TABLE #export

DECLARE @imgID INT,
    @imgName VARCHAR(128),
    @sql VARCHAR(8000)

SELECT * 
INTO #export
FROM Blob


WHILE (SELECT COUNT(*) FROM #export) > 0
BEGIN
    SELECT TOP 1 @imgID = ID,
        @imgName = imgName
    FROM #export

    SET @sql = 'BCP "SELECT Content FROM DATABASENAME.dbo.Blob WHERE ID = '  + CONVERT(VARCHAR(10), @imgID) + '" QUERYOUT C:\Users\Public\Documents\' + '' + @imgName + '' + ' -T -f C:\Users\Public\Documents\blob.fmt -S ' + @@SERVERNAME

    EXEC master.dbo.xp_CmdShell @sql

    DELETE #export
    WHERE ID = @imgID
END 

4) Теперь вы можете увидеть изображения ниже введите описание изображения здесь

4.1) Изображение бухгалтера введите описание изображения здесь

4.2) Account2 Image введите описание изображения здесь

5) Таким образом, вы можете либо в PHP скопировать все образы на указанный вами диск, либо использовать SSIS, либо изменить местоположение в хранимой процедуре, где вы хотите сохранить на диск.

Надеюсь это поможет.

Другие вопросы по тегам