如何在GridView中显示上传的文件,并在点击相应的下载链接按钮下载它们?

时间:2012-11-02 11:19:04

标签: c# asp.net sql sql-server

我使用fileupload上传文件,文件的详细信息如文件类型,文件名和完整路径存储在数据库中名为exceldetails的表中,现在我要显示上传的文件并通过单击下载它们在GridView中每个文件旁边的链接按钮上。这就是我上传文件的方式:

        string[] filePaths;
    string strFileType = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower();
    string strFileName = FileUpload1.PostedFile.FileName.ToString();
    FileUpload1.SaveAs(Server.MapPath("~/Import/" + strFileName + strFileType));
    string strNewPath = Server.MapPath("~/Import/" + strFileName + strFileType);
    string strNewPath1 = Server.MapPath("~/Import/" + strFileName + strFileType).ToString();
    fileSize = FileUpload1.PostedFile.ContentLength / 1024;

    //EXCEL DETAILS TABLE
    con.Open();
    //=========================================
    DataTable dt8 = new DataTable();
    SqlCommand cmd8 = new SqlCommand("insert into exceldetails (name,type,details,size,path)" + "values(@name,@type,@details,@size,@path)", con);
    cmd8.Parameters.Add("@name", SqlDbType.VarChar).Value = strFileName;
    cmd8.Parameters.Add("@type", SqlDbType.VarChar).Value = strFileType;
    cmd8.Parameters.Add("@details", SqlDbType.VarChar).Value = DateTime.Now;
    cmd8.Parameters.Add("@size", SqlDbType.Int).Value = fileSize;
    cmd8.Parameters.Add("@path", SqlDbType.NVarChar).Value = strNewPath;
    cmd8.ExecuteNonQuery();
    con.Close();
    try
    {
        SqlDataAdapter da8 = new SqlDataAdapter(cmd8);
        da8.Fill(dt8);
    }
    catch { }

我是初学者,因为你可以从问题本身判断,所以请告诉我在哪里需要添加详细信息

3 个答案:

答案 0 :(得分:2)

你的代码也非常混乱

尝试将插件更改为类似的内容:

using( SqlConnection cn = new SqlConnection( "Your Conn String" ) )
{
    cn.Open();
    string sqlInsert = "INSERT STATEMENT";
    string fileName = FileUploadControl.FileName;
    string fileExtension = fileName.Substring( fileName.LastIndexOf( "." ), fileName.Length - fileName.LastIndexOf( "." ) );
    string filePath = "~/Import/" + fileName + fileExtension;
    int fileSize = FileUploadControl.PostedFile.ContentLength / 1024;

    FileUploadControl.SaveAs( Server.MapPath( filePath ) );

    using( SqlCommand cmd = new SqlCommand( sqlInsert, cn ) )
    {
        cmd.Parameters.AddWithValue( "@name", fileName );
        cmd.Parameters.AddWithValue( "@type", fileExtension );
        cmd.Parameters.AddWithValue( "@details", DateTime.Now );
        cmd.Parameters.AddWithValue( "@size", fileSize );
        cmd.Parameters.AddWithValue( "@path", filePath );
        cmd.ExecuteNonQuery();
    }
}

这是为了获取要绑定的数据

using( SqlConnection cn = new SqlConnection( "Your Conn String" ) )
{
    string sqlSelect = "SELECT STATEMENT";

    using( SqlDataAdapter da = new SqlDataAdapter( sqlSelect, cn ) )
    {
        DataTable dt = new DataTable();
        da.Fill( dt );

        //bind data
    }
}

同时考虑使用转发器,它比网格视图更灵活。

答案 1 :(得分:0)

您必须在网格中添加超链接列,其导航网址应设置为

"~/Import/" + strFileName + strFileType

您将整个物理路径存储在数据库中,您应该将“〜/ Import /”+ strFileName + strFileType 存储在数据库中,并将该列用作下载链接列的数据源

答案 2 :(得分:0)

以下是使用gridview模板项执行此操作的示例:

<asp:TemplateField>
    <ItemTemplate>
      <asp:HyperLink ID="HyperLink1"
         runat="server"
         NavigateUrl='<%# Eval("AttachmentID", "GetAttachment.aspx?ID={0}") %>'
         ImageUrl="~/Images/Download16.png"
         Target="_blank"
         Height="16px"
         Width="16px">
      </asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

但是,我的附件文件存储在数据库中。我有一个页面接受一个标识附件的查询字符串参数,然后用于获取附件并让用户下载它。您应该修改超链接的navigateURL属性以链接到需要下载的内容。请注意,'AttachmentID'是由网格的数据源选择的字段,您可能会使用'FilePath'或类似的东西。