Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何将字节数组转换为原始文件(提供文件下载)_Asp.net_Azure Sql Database - Fatal编程技术网

Asp.net 如何将字节数组转换为原始文件(提供文件下载)

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());

我正在使用Opendialogbox读取文件。然后将文件存储在byte[]数组中

文件-->字节[] 字节[]-->存储在SQL AZure的varbinary(max)字段中

这是我的密码:

      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”的访问被拒绝