Столбец SQL Server Image в HTML - PullRequest
0 голосов
/ 22 мая 2018

У меня есть таблица со всеми фотографиями сотрудников в таблице SQL Server.Столбец имеет тип Image

У меня есть требование загрузить профиль emplyee в текстовом формате с изображением в нем.Мне удалось экспортировать все их данные в формате HTML, а затем я использовал следующий код C #, чтобы преобразовать этот HTML в слово и выдать его для загрузки.

public static void HtmlToWordDownload(string HTML, string FileName)
{
    lock (LockMulti)
    {
        string strBody = string.Empty;
        strBody = @"<html xmlns:o='urn:schemas-microsoft-com:office:office' " +
        "xmlns:w='urn:schemas-microsoft-com:office:word'" +
        "xmlns='http://www.w3.org/TR/REC-html40'>" +
        "<head><title>Document Title</title>" +
         "<!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:Zoom>100</w:Zoom>" +
         "<w:DoNotOptimizeForBrowser/></w:WordDocument></xml><![endif]-->" +
         "<style> @page Section1 {size:8.27in 11.69in; mso-first-footer:ff1; mso-footer: f1; mso-header: h1; " +
            //"border:solid navy 2.25pt; padding:24.0pt 24.0pt 24.0pt 24.0pt; " +
         "margin:0.6in 0.6in 0.6in 0.6in ; mso-header-margin:.1in; " +
         "mso-footer-margin:.1in; mso-paper-source:0;} " +
         "div.Section1 {page:Section1;} p.MsoFooter, li.MsoFooter, " +
         "div.MsoFooter{margin:0in; margin-bottom:.0001pt; " +
         "mso-pagination:widow-orphan; tab-stops:center 3.0in right 6.0in; " +
         "font-size:12.0pt; font-family:'Arial';} " +
         "p.MsoHeader, li.MsoHeader, div.MsoHeader {margin:0in; " +
         "margin-bottom:.0001pt; mso-pagination:widow-orphan; tab-stops:center " +
         "3.0in right 6.0in; font-size:12.0pt; font-family:'Arial';}--></style></head> ";
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.ContentType = "application/vnd.ms-word";
        HttpContext.Current.Response.AddHeader("Content-Disposition", "inline;filename=" + FileName + ".doc");
        StringBuilder htmlCode = new StringBuilder();
        htmlCode.Append(strBody);
        htmlCode.Append("<body><div class=Section1>");
        htmlCode.Append(HTML);
        htmlCode.Append("</div></body></html>");
        HttpContext.Current.Response.Write(htmlCode.ToString());
        HttpContext.Current.ApplicationInstance.CompleteRequest();
        HttpContext.Current.Response.Flush();
    }
}

Он работает абсолютно нормально.Теперь, как я могу вставить фотографию сотрудника в это.В какой формат я должен конвертировать это изображение для встраивания в HTML.Я попробовал следующий запрос, но он дает одинаковый вывод для всех картинок.Пожалуйста, помогите.

select 
    top 30 convert(varchar, convert(binary, i.Photo)) 
from hrm.hrm_rp_Employee_Image i

Вывод выглядит следующим образом

(No column name)
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà
ÿØÿà

Мой подход правильный или что-то еще нужно сделать?

Обновление

Я обнаружил следующий запрос, чтобы преобразовать его в base64.

declare @pic varchar(max)
SELECT  @pic = '<img src="data:image/jpg;base64,' + CAST(N'' AS XML).value(
          'xs:base64Binary(xs:hexBinary(sql:column("Pic")))'
        , 'VARCHAR(MAX)'
    ) 
FROM (
   SELECT CAST(Photo AS VARBINARY(MAX)) AS Pic from hrm.hrm_rp_Employee_Image
) AS h;

set @pic = @pic + '" style="height: 100px; width: 100px;" />' 
print @pic

Он успешно конвертирует и выдает мне строку, и он отлично работает, когда я тестирую ее в любом онлайн-редакторе html.

Но он не отображается в моем файле слова после загрузки,появляется изображение красного цвета с символом «X», может кто-нибудь сказать мне, в чем может быть проблема.

1 Ответ

0 голосов
/ 22 мая 2018

вам нужно преобразовать двоичные данные в изображение в c #, а затем добавить его в html.

ссылка ниже поможет вам преобразовать двоичные данные в изображение

ссылка

...