我使用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 { }
我是初学者,因为你可以从问题本身判断,所以请告诉我在哪里需要添加详细信息
答案 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'或类似的东西。