将从web url获取的图像插入SQL Server

本文关键字:插入 SQL Server 图像 web url 获取 将从 | 更新日期: 2023-09-27 18:22:22

我从web远程拍摄了一张图像到我的<asp:Image>中,现在我想将该图像插入SQL Server中。请帮忙!我有一个简单的表id (pk),我的image (image)

或者,当您唯一可用的是图像url时,是否可以将从web获取的图像插入SQL Server图像数据类型?

感谢

将从web url获取的图像插入SQL Server

使用C#从URL下载图像

为了使用WebClient,您可能需要包含System.Net命名空间。

WebClient wc = new WebClient(); 
wc.DownloadFile(URL_Of_The_Image, FileName_You_Want_to_Store_It_As);

使用OPENROWSET将映像上载到SQL Server表

CREATE TABLE EmployeeProfile
(
    EmpId INT,
    EmpName VARCHAR(50) not null,
    EmpPhoto VARBINARY(MAX) not null
)
GO  
INSERT EmployeeProfile (EmpId, EmpName, EmpPhoto)
SELECT 1001, 'Vadivel', BulkColumn
FROM OPENROWSET( BULK 'C:'Images'Demo.jpg', Single_Blob) AS EmployeePicture
GO

请参阅-http://vadivel.blogspot.in/2005/10/saving-images-as-blob-into-sql-server.html

如果你只有一个URL,你必须使用类似WebClient.DownloadData(url)的东西来在本地获取它,请记住a:它可能实际上不会给你图像(referr/auth-checks等),b:版权可能会适用。

然后,它只是将byte[]交给SQL服务器的一个例子。可以将byte[]传递给SqlParameter.Value,对于SQL Server中的存储,可以使用varbinary(max)类型。我还建议存储从WebClient.ResponseHeaders返回的内容类型,这样你就知道它是什么类型的图像

不要使用image数据类型;被varbinary(max):废弃

ntext、text和image数据类型将在未来版本的Microsoft SQL Server中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max)、varchar(max)和varbinary(max)。

(来源:MSDN)

有点老了,但我想可能还有人在寻找解决方案(我是!;-)。我写了一个小SP,只是为了下载一个图像(几乎任何大小),并将其作为BLOB导入一个名为"图片"的表中。Python的六行代码进行实际下载,并期望URL和磁盘上所需的名称作为参数。Python代码由SP执行。Python代码:

import requests
import sys
url = sys.argv[1]
fname = sys.argv[2]
myfile = requests.get(url)
open(fname, 'wb').write(myfile.content)

将其保存在方便的地方,作为ImgDownloader.py。然后我们需要一个SQL表来存储我们下载的任何内容:

CREATE TABLE Pictures (
    PicName     NVARCHAR(40),    -- Any name you want
    PicFileName NVARCHAR(100),   -- The file name
    PicData     VARBINARY(MAX) ) -- The binary image data

最后是SP本身:

ALTER PROCEDURE [dbo].[DownloadAndImportImage] 
    @URL VARCHAR(2000)
AS
SET NOCOUNT ON
DECLARE @FileName VARCHAR(100), @FullFileName VARCHAR(500), @Query VARCHAR(2000), @RevURL VARCHAR(2000), @LZ VARCHAR(200), @PicName VARCHAR(40)
-- NINO
SET @URL = ISNULL(LTRIM(RTRIM(@URL)), '')
IF @URL = '' OR LEFT(@URL, 4) <> 'http' RETURN
-- Basic settings
SET @LZ = 'C:'Temp'LZ'  -- Our temp Landing Zone folder for the downloaded images. No slash at the end
-- Clean up the LZ first. An aborted previous run may have left something there
SET @Query  = 'RD ' + @LZ + ' /s/q'
EXECUTE Master..xp_cmdshell @Query
SET @Query  = 'MD ' + @LZ
EXECUTE Master..xp_cmdshell @Query
-- Then figure out the file name and have Python download the file using some dynamic SQL
SET @RevURL       = REVERSE(@URL)
SET @FullFileName = @LZ + REPLACE(REVERSE(LEFT(@RevURL, CHARINDEX('/', @RevURL))), '/', ''')
SET @FileName     = REPLACE(@FullFileName, @LZ + ''', '')
SET @Query        = 'python.exe <path to your Pyton code here>'ImgDownloader.py ' + @URL + SPACE(1) + @FullFileName
EXECUTE Master..xp_cmdshell @Query
-- Insert the image on disk into the Pictures table
SET @PicName = 'Some description'
SET @Query = 'INSERT INTO Pictures (PicName, PicFileName, PicData) SELECT ' + '''' + @PicName + '''' + ', ' + '''' + @FileName + '''' + ', * '
SET @Query += 'FROM OPENROWSET(Bulk ' + '''' + @FullFileName + '''' + ', Single_Blob) AS IMG'
EXEC(@Query)
-- Lastly, clear the LZ again
SET @Query  = 'RD ' + @LZ + ' /s/q'
EXECUTE Master..xp_cmdshell @Query

通过执行SP:

EXEC DownloadAndImportImage 'https://www.pocketfms.com/Graphics/SitesShared/FirstSolo.jpg'

您将看到表格图片接收到一个新行,图像为二进制数据。希望它能帮助到别人!

本文提供了您需要的一切(以及更多):

http://www.codeproject.com/Articles/126421/Image-Handling-In-ASP-NET