Asp.net 如何将字节数组转换为原始文件(提供文件下载)
我正在使用Opendialogbox读取文件。然后将文件存储在byte[]数组中 文件-->字节[] 字节[]-->存储在SQL AZure的varbinary(max)字段中 这是我的密码:Asp.net 如何将字节数组转换为原始文件(提供文件下载),asp.net,azure-sql-database,Asp.net,Azure Sql Database,我正在使用Opendialogbox读取文件。然后将文件存储在byte[]数组中 文件-->字节[] 字节[]-->存储在SQL AZure的varbinary(max)字段中 这是我的密码: OpenFileDialog ofd = new OpenFileDialog(); if ((bool)ofd.ShowDialog()) { FileStream fileStream = ofd.File.OpenRead());
OpenFileDialog ofd = new OpenFileDialog();
if ((bool)ofd.ShowDialog())
{
FileStream fileStream = ofd.File.OpenRead());
byte[] buffer = new byte[fileStream.Length];
int read = 0;
using (BinaryReader binaryReader = new BinaryReader(fileStream))
{
do
{
read = binaryReader.Read(buffer, 0, Convert.ToInt32(fileStream.Length));
// Stored the File in byte[] Array buffer
} while (read > 0);
}
}
现在我想把这个字节数组转换成原始文件(比如.doc、.txt、jpeg)。我知道要转换文件的扩展名
SQL AZure-->byte[]//完成
字节[]--->到原始文件。//问题
请给出下载该文件的解决方案。一种方法(不一定是最好的)如下所示:
using (MemoryStream ms = new MemoryStream(theBytes))
{
using (FileStream fs = new FileStream(string.Format("C:\\tempfile.{0}", theExtension)))
{
ms.WriteTo(fs);
}
}
一种方法——不一定是最好的——如下所示:
using (MemoryStream ms = new MemoryStream(theBytes))
{
using (FileStream fs = new FileStream(string.Format("C:\\tempfile.{0}", theExtension)))
{
ms.WriteTo(fs);
}
}
看起来您遇到的问题可能与保存二进制文件无关;这更可能是一个基本的安全问题。尝试保存到具有编程写入权限的路径。例如,尝试保存到My Documents目录而不是C:。尝试像这样使用Environment.SpecialFolder枚举,并附加文件名+扩展名 GetFolderPath(Environment.SpecialFolder.MyDocuments)
您还有许多其他方法可以解决此问题,包括以提升模式启动Visual Studio(以管理员身份运行),和/或允许“所有人”对您的C:\驱动器进行写访问。但我不一定推荐这些技术;考虑保存到安全设置低于C:\的文件夹,例如“我的文档”。 您遇到的问题似乎与保存二进制文件无关;这更可能是一个基本的安全问题。尝试保存到具有编程写入权限的路径。例如,尝试保存到My Documents目录而不是C:。尝试像这样使用Environment.SpecialFolder枚举,并附加文件名+扩展名 GetFolderPath(Environment.SpecialFolder.MyDocuments)
您还有许多其他方法可以解决此问题,包括以提升模式启动Visual Studio(以管理员身份运行),和/或允许“所有人”对您的C:\驱动器进行写访问。但我不一定推荐这些技术;考虑保存到安全设置低于C:\的文件夹,例如“我的文档”。 您的代码没有将文件上载到任何位置。如果您正在将文件上载到SQL Azure,则只需使用SQL Azure API读取字节[],然后写入目标流(文件或响应等),我想从字节[]数组下载文件。当我执行System.IO.file.WriteAllBytes(“urfile.jpeg”,buffer)时。它给出了不允许的错误文件操作。对路径urfile.jpeg的访问被拒绝–访问错误是因为进程没有写入文件的权限。你知道代码在哪个用户帐户下运行吗?是的,我知道。是否可以设置权限。但是明天,这段代码可能会在不同的帐户上运行,那么该怎么办呢。如果您正在将文件上载到SQL Azure,则只需使用SQL Azure API读取字节[],然后写入目标流(文件或响应等),我想从字节[]数组下载文件。当我执行System.IO.file.WriteAllBytes(“urfile.jpeg”,buffer)时。它给出了不允许的错误文件操作。对路径urfile.jpeg的访问被拒绝–访问错误是因为进程没有写入文件的权限。你知道代码在哪个用户帐户下运行吗?是的,我知道。是否可以设置权限。但明天,这段代码可能会在不同的帐户上运行,然后将执行什么操作。它给了我相同的错误--不允许文件操作。对路径“C:\nwFile.jpeg”的访问被拒绝。编辑给了我相同的错误--不允许进行文件操作。对路径“C:\nwFile.jpeg”的访问被拒绝