使用存储过程将文件 URL 转换为文件字节?
Posted
技术标签:
【中文标题】使用存储过程将文件 URL 转换为文件字节?【英文标题】:Convert a file URL to file byte in using a stored procedure? 【发布时间】:2021-10-26 21:05:21 【问题描述】:我的数据库有一张 person 表,在该表上有一个名为 PersonImageUrl
的列(托管在 azure 的公共容器中)。我即将迁移到新数据库。新数据库表中的新列需要VARBINARY(max)
。我想创建一个存储过程,将PersonImageUrl
(URL 指向的文件)的内容转换为字节数组,以满足我的迁移要求。这可能吗?
【问题讨论】:
该字节数组的预期内容是什么? URL 指向的文件的 URL 或字节? 您可以尝试类似***.com/questions/4798538/… 的方法来获取图像,并将结果作为字节数组传递给您的存储过程。 @DaleK 我已经尝试过大量研究,但不幸的是我没有找到任何答案。 好像你有图片的网址。所以你需要下载图像,转换为字节数组并保存到新的数据库。这不能用存储过程来完成。 为什么新表also 不直接指向URL?将字节存储在数据库中很麻烦,原因有很多,最重要的是:SQL Server 磁盘空间比专门为存储而设计的基本文件系统方式更昂贵(并且通常对吞吐量敏感)并提供文件。 【参考方案1】:Azure SQL 数据库(和 SQL Server 2017+)具有与 Azure BLOB 存储的内置集成,对于公共容器,您甚至不需要凭据, 例如:
CREATE EXTERNAL DATA SOURCE BlobStore
WITH
(
TYPE = BLOB_STORAGE,
LOCATION = 'https://MyStorageAccount.blob.core.windows.net'
);
SELECT BulkColumn Image
FROM OPENROWSET
(
BULK 'MyPublicContainer/someimage.jpg',
DATA_SOURCE = 'BlobStore',
SINGLE_BLOB
) AS blob;
Examples of bulk access to data in Azure Blob storage
【讨论】:
嗨@David Browne,我的朋友对此有一个相关的问题。在这里发布***.com/questions/69743468/… 嗨@David Browne,您是否尝试过将其与天蓝色容器中文件夹内的文件一起使用?不能打开。操作系统错误代码32(该进程无法访问该文件,因为它正在被另一个进程使用 Blob 容器没有文件夹。使用“/”来模拟文件夹结构只是一种约定。 嗨@David Browne,我认为我的主要问题是,当我通过浏览器打开 URL 时它可以工作,但在存储过程中它会抛出此错误,无法打开。操作系统错误代码32(该进程无法访问该文件,因为它正在被另一个进程使用以上是关于使用存储过程将文件 URL 转换为文件字节?的主要内容,如果未能解决你的问题,请参考以下文章