使用C#中的fileuploadControl将数据保存到数据库

时间:2016-09-19 22:33:01

标签: c# asp.net sql-server database file-upload

我的表单中有一个多文件上传控件。我试图通过下拉列表上传尽可能多的用户想要数据库的文件,以选择附件类型。我能够将文件保存到数据库,但是我的数据全部为0(0x0000000000000000000000000000000000000000 ... 00)。 当我在用户点击文件链接时尝试检索文件时,我收到一条错误,即syas"无法加载pdf文档"。

以下是我将其保存到数据库的代码:

    public void getDynamicFilesFromUploadedFileList(int wWireTransferID, int wUserID)
    {
        if (GridView1.Rows.Count > 0)
        {
            foreach (GridViewRow grow in GridView1.Rows)
            {
                try
                {
                    FileUpload fileuploadControl = new FileUpload();
                    fileuploadControl = (FileUpload)grow.FindControl("fUpControl");

                    DropDownList drpFileType = new DropDownList();
                    drpFileType = (DropDownList)grow.FindControl("ddlFileType");
                    Guid newID = Guid.NewGuid();

                    if (fileuploadControl.HasFile)
                    {
                       //I believe here is my mistake
                        Byte[] fileData = new Byte[fileuploadControl.PostedFile.ContentLength];

                        new MRSManager().InsertWTDocument(wWireTransferID,
                             fileuploadControl.FileName,
                             drpFileType.SelectedValue.Trim(),
                             fileuploadControl.PostedFile.ContentType,
                             System.IO.Path.GetExtension(fileuploadControl.FileName),
                             fileuploadControl.PostedFile.ContentLength.ToString(),
                             fileData,
                             wUserID,
                             newID);
                    }
                    else
                    {
                        string m = "No File! ";
                    }
                }
                catch (Exception Exp)
                {
                    string msg = Exp.Message.ToString();
                }
            }
        }
    }

enter image description here

这是我如何尝试检索文件的代码。

    protected void Page_Load(object sender, EventArgs e)
    {
        // Get the file id from the query string
        string id = Request.QueryString["ID"];

        // Get the file from the database
        DataTable file = GetAFile(id);
        DataRow row = file.Rows[0];

        string name = (string)row["FileName"];
        string contentType = (string)row["ContentType"];
        Byte[] data = (Byte[])row["Data"];

        Response.Clear();
        Response.ClearContent();
        Response.ClearHeaders();
        // Send the file to the browser
        Response.AddHeader("Content-type", contentType);
        Response.AddHeader("Content-Disposition", "inline; filename=" + name);
        Response.Buffer = true;
        Response.BinaryWrite(data);
        Response.Flush();
        Response.Close();
        Response.End();
    }

    // Get a file from the database by ID
    public static DataTable GetAFile(string id)
    {
        DataTable file = new DataTable();
        string sSQL = string.Format("SELECT * FROM tblWireTransferDocuments WHERE FileID = '{0}'", id);
        file = SqlHelper.ExecuteDataset(DBConnection.GetConnectionString(), CommandType.Text, sSQL, null).Tables[0];
        return file;
    }
}

}

1 个答案:

答案 0 :(得分:2)

你是对的

 //I believe here is my mistake
 Byte[] fileData = new Byte[fileuploadControl.PostedFile.ContentLength];

您只创建了fileData,但没有填充它。您应该使用fileuploadControl.FileContent来填充fileData。