将字节下载到其原始文件格式,然后保存到本地驱动器

时间:2016-10-12 09:51:20

标签: c#

我已经创建了一个应用程序,它允许我暂时将文件保存为数组中的一堆字节。我在C#中将此作为entity.FileUpload

提供给我

我有另一个名为entity.Type的实体,它指定它是PDF,DOCX,XLSX等...... 但是为了这个问题,生病只使用PDF < / EM>

现在从这个阶段开始,我希望能够:

  1. 转换entity.FileUpload from its bunch of bytes, to a PDF然后......
  2. 将其保存在我的电脑“C:/ Temp”;
  3. 所以我的问题是:是否可以将此字节转换为pdf,然后将其本地下载到我的机器上?如果是,我将如何实现这一目标

    如果我需要针对不同文件类型的不同代码块,那么这是可以的,我可以在以后进行,但是对于此问题的任何帮助

    我在entity.FileUpload下可以看到哪些数据: enter image description here

    文件的保存方式:

    我在前端使用Javascript保存到应用程序中的本地数据库,如下所示:

      msls.readFile(screen, '.pdf', function (file, data) {
    
            var pdf = myapp.activeDataWorkspace.LocalDatabase.Enquiries.addNew();
    
            pdf.FileName = file.name;
            pdf.Type = file.type;
            pdf.FileUpload= data;
    
            myapp.activeDataWorkspace.LocalDatabase.saveChanges().done(function () {
                msls.showMessageBox('PDF ' + file.name + ' imported.');
            }, function (error) {
                msls.showMessageBox(error[0].message, { title: "Save Changes Error" });
            });
        });
    
    • 本地数据库用于测试目的,称为“LocalDatabase”
    • 该表名为“查询”

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

        SqlCommand cmd;
        SqlConnection conn;
        SqlDataReader dr;
        string FileName = "";
        string FileType = "";

        //Get FileName And Type
        cmd = new SqlCommand("SELECT FileName, FileType FROM YourTable WHERE YourCondition", conn);
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            FileName = dr["FileName"].ToString();
            FileType = dr["FileType"].ToString();
        }

        //Load the varbinary into a datatable
        cmd = new SqlCommand("SELECT FileData FROM YourTable WHERE YourCondition", conn);
        DataTable dt = new DataTable();
        dr = cmd.ExecuteReader();
        dt.Load(dr);    

        //Extract the rows into a byte array
        byte[] stream = (byte[])dt.Rows[0][0];

        //Re-create the file from the byte array
        File.WriteAllBytes(@"C:\Temp\" + FileName + FileType, stream);