我必须在何处以及如何保留每个文件的二进制数据,因为我需要它们才能保存在数据库中

时间:2013-03-13 19:20:37

标签: c# asp.net

在我的页面中,我有2个按钮,一个按钮用于上传文件,并在网格视图中显示它们,另一个按钮“发送”用于在数据库中保存文件。

我使用下面的代码在网格视图中显示文件名,大小和类型,然后我可以从网格视图中获取这些值并保存在数据库中。但我有二进制数据的问题。 我不知道在哪里以及如何保存每个文件的二进制数据,因为在保存到数据库之后我需要它们。

protected void btnUpload_Click(object sender, EventArgs e)
{
    DataTable dt;
    DataRow dr = null;
    bool isDuplicate = false;



    if (FileUpload1.HasFile)
    {
        FileInfo fileObj = new FileInfo(FileUpload1.PostedFile.FileName);
        string FileName = FileUpload1.PostedFile.FileName;


        long size = FileUpload1.PostedFile.ContentLength;

        string ext = Path.GetExtension(FileName);

        string contenttype = String.Empty;



        //Set the contenttype based on File Extension

        switch (ext)
        {

            case ".doc":

                contenttype = "application/vnd.ms-word";

                break;

            case ".docx":

                contenttype = "application/vnd.ms-word";

                break;

            case ".xls":

                contenttype = "application/vnd.ms-excel";

                break;

            case ".xlsx":

                contenttype = "application/vnd.ms-excel";

                break;

            case ".jpg":

                contenttype = "image/jpg";

                break;

            case ".png":

                contenttype = "image/png";

                break;

            case ".gif":

                contenttype = "image/gif";

                break;

            case ".pdf":

                contenttype = "application/pdf";

                break;

        }

        Stream fs = FileUpload1.PostedFile.InputStream;

        BinaryReader br = new BinaryReader(fs);

        Byte[] bytes = br.ReadBytes((Int32)fs.Length);


        if (FileUpload1.PostedFile.ContentLength > 0)
        {


            if (GridViewEfile.Rows.Count > 0)
            {

                int count = GridViewEfile.Rows.Count;

                dt = new DataTable();

                DataColumn dc1 = new DataColumn("File Name", typeof(string));

                DataColumn dc2 = new DataColumn("File Size", typeof(string));

                dt.Columns.Add(dc1);

                dt.Columns.Add(dc2);



                for (int i = 0; i < count; i++)
                {
                    if (GridViewEfile.Rows[i].Cells[1].Text == FileName)
                    {
                        Label2.Text = "File already in the list";
                        isDuplicate = true;
                        break;
                    }
                }

                for (int j = 0; j < count; j++)
                {
                    dr = dt.NewRow();
                    dr["File Name"] = GridViewEfile.Rows[j].Cells[1].Text;
                    dr["File Size"] = GridViewEfile.Rows[j].Cells[2].Text;
                    dt.Rows.Add(dr);
                }

                if (!isDuplicate)
                {
                    if (size == 0)
                    {
                        Label2.Text = "File size cannot be 0";
                    }
                    else
                    {
                        dr = dt.NewRow();
                        dr["File Name"] = FileName;
                        dr["File Size"] = size.ToString() + " KB";

                        dt.Rows.Add(dr);
                    }
                }

                GridViewEfile.DataSource = dt;
                GridViewEfile.DataBind();
                    }






            else
            {
                dt = new DataTable();

                DataColumn dc1 = new DataColumn("File Name", typeof(string));

                DataColumn dc2 = new DataColumn("File Size", typeof(string));

                DataColumn dc3 = new DataColumn("Content Type", typeof(string));

                DataColumn dc4 = new DataColumn("Bytes", typeof(Byte[]));

                dt.Columns.Add(dc1);

                dt.Columns.Add(dc2);
                dt.Columns.Add(dc3);
                dt.Columns.Add(dc4);

                dr = dt.NewRow();

                dr["File Name"] = FileName;

                if (size > 0)
                    dr["File Size"] = size.ToString() + " KB";
                else
                { dr["File Size"] = fileObj.Length.ToString() + " Bytes"; }

                dr["Content Type"] = contenttype;
                dr["Bytes"] = bytes;
                var x = bytes;
                var y = dr["Bytes"];
                dt.Rows.Add(dr);
                GridViewEfile.DataSource = dt;
                GridViewEfile.DataBind();
            }

        }


    }
    else
    {
        Label2.Text = "Please select a file to add";
    }
}

1 个答案:

答案 0 :(得分:1)

这个链接几乎有相同的问题,答案是完美的How to store the file in the database?