Сохранить файл изображения на диске из данных изображения в таблице 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));
}

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

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

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

Спасибо

1

Решение

Хорошо, вы можете сделать все это в 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 BlobWHILE (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, либо изменить местоположение в хранимой процедуре, где вы хотите сохранить на диск.

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

0

Другие решения

На сервере 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 instagent MYSql

Eg----> SqlConnection, SqlCommand,SqlDataReader
0

По вопросам рекламы [email protected]