SQL Server 图像列到 html

Posted

技术标签:

【中文标题】SQL Server 图像列到 html【英文标题】:SQL Server Image column to html 【发布时间】:2018-10-31 18:15:04 【问题描述】:

我在 SQL Server 表中有一个包含所有员工图片的表。列的类型为Image

我需要下载 word 格式的员工个人资料,其中包含他们的照片。我能够以 html 格式导出他们的所有数据,然后我使用以下 C# 代码将该 html 转换为 word 并将其作为下载提供。

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.MsoFootermargin: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 编辑器上测试它时,它都能完美运行。

但下载后我的word文件中没有显示,出现带有红色“X”符号的图像,谁能告诉我可能是什么问题。

【问题讨论】:

图片是否需要保存在database中?如果不是,您可以将图像存储在其他位置,然后将路径存储在数据库中并使用它,如果您想使用image 列,然后给这个链接一个镜头link。 是的,我无法更改它,因为它是由 IT 经理决定的,而且已经持续了很长时间,我唯一的方法就是将该图像转换为字符串并将其分配给 【参考方案1】:

你需要在c#中将二进制数据转换成图像,然后附加到html中。

以下链接将帮助您将二进制数据转换为图像

link

【讨论】:

以上是关于SQL Server 图像列到 html的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 逗号分隔列到多列

将图像插入 sql server 并检索它

在 SQL Server 中存储图像?

SQL Server文本和图像函数

如何仅使用 javascript 将图像转换为字节数组以将图像存储在 sql server 上?

仅使用 SQL 将图片插入 SQL Server 2005 图像字段