2014-02-27 2 views
2

VS2012 ASP.NET 웹 사이트를 사용하고 있으며 폴더에 파일을 업로드하는 asp.net 페이지가 있습니다.ASP.Net의 데이터베이스에 저장된 파일 경로를 사용하여 파일을 다운로드하십시오.

파일을 업로드하면 ~/Client_Info/text.docx과 같은 SQL 데이터베이스 테이블 필드에 경로가 저장되고 파일 자체가 폴더에 저장됩니다.

다운로드 링크가있는 gridview에 저장하여 저장 한 파일을 다운로드하고 싶습니다. 그러나 하루 종일 검색 한 후에 나는 대답을 얻을 수 없습니다. 누군가 나를 도울 수 있습니까?

protected void lnkDownload_Click(object sender, EventArgs e) 
{ 

    LinkButton lnkbtn = sender asLinkButton; 
    GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow; 

    int fileid = Convert.ToInt32(gvDetails.DataKeys[gvrow.RowIndex].Value.ToString()); 
    string name, type; 

    using (SqlConnection con=new SqlConnection(strCon))  
    { 

     using (SqlCommand cmd=new SqlCommand()) 
     { 

      cmd.CommandText = "select FileName, FileType, FileData from FileInformation where [email protected]"; 
      cmd.Parameters.AddWithValue("@id", fileid); 
      cmd.Connection = con; 

      con.Open();  
      SqlDataReader dr = cmd.ExecuteReader(); 

      if(dr.Read()) 
      { 
       Response.ContentType = dr["FileType"].ToString(); 
       Response.AddHeader("Content-Disposition", 
            "attachment;filename=\"" 
            + dr["FileName"] + "\""); 

       Response.BinaryWrite((byte[])dr["FileData"]); 
       Response.End();  
      } 
     } 
    } 
} 
+1

[FileData] 열에 저장된 내용은 코드를 작성하는 중입니다. 그러나 파일 자체가 파일 시스템에 저장되어 있고 데이터베이스 테이블은 파일 정보 만 보유하고 있다고 명시합니다. 먼저 디스크에서 파일을 읽은 다음 응답에 기록해야합니다. –

답변

0

응답에 파일을 쓰려면 Response.WriteFile 기능을 사용할 수 있습니다. 매개 변수로 파일의 실제 경로를 취합니다.

파일 경로가 올 바르고 파일이 있다고 가정하면 다음 코드를 시도 할 수 있습니다.

Response.ContentType = dr["FileType"].ToString(); 
Response.AddHeader("Content-Disposition", 
    "attachment;filename=\"" 
    + dr["FileName"].ToString() + "\""); 

Response.WriteFile(Server.MapPath(dr["FileName"].ToString())); 
Response.End(); 
+0

Thansk 응답에 대해 질문이 있습니다. 개체 "dr"은 int로 데칼됩니다. 그리고 그것은 나에게 오류를 준다 "객체 '에서'문자열 '로 변환 할 수 없다"나는 그것을 해결합니까? – user3362569

+0

'dr' 개체는'SqlDataReader'입니다. 어쩌면 그것은 변환에 실패한'dr [...]''일 것입니다. 내 코드를 약간 편집했는데, 이것이 정확할 것입니다. –

관련 문제