2012-05-11 4 views
1

파일 이름이 mysql에 BLOB로 저장됩니다. 이 정상적으로 업로드되고 있습니다. 이제 우리는 그것을 fron gridview 완벽하게 작동하도록 다운로드하고 싶습니다. 그러나 문제는 파일을 열려고 할 때 벌금을 다운로드 한 후 파일 형식 오류를 표시한다는 것입니다. 우리는 오직 사무용 문서 및 pdf만을 다루고 있습니다.Aspx를 사용하여 Mysql에서 BLOB 파일 다운로드

try 
{ 
    int did = Convert.ToInt32(e.CommandArgument); 
    DataSet path = download.GetresourcePath(did); 
    byte[] fileFromDatabase = null; 
    DataRow row = path.Tables[0].Rows[0]; 
    fileFromDatabase = (byte[])row["UPLFILE"]; 
    string filename = (string)row["FILENAME"]; 

    if (fileFromDatabase.Length > 0) 
    { 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = string.Format("application/{0}", 
     Path.GetExtension(filename).Substring(1)); 
    Response.AddHeader("content-disposition", 
     string.Format("attachment;filename={0}", filename)); 
    Response.BinaryWrite(fileFromDatabase); 
    Response.Flush(); 
    Response.End(); 
    } 
} 
catch (Exception) 
{ 
    return; 
} 
    여기
  1. 한 우리는 그리드 뷰에서 점점 파일의 ID입니다.
  2. filename은 데이터베이스에서 가져 오는 파일의 이름입니다.
  3. fileFromDatabase는 Mysql의 BLOB 파일이며 Byte로 변환됩니다.

그래서 내가 뭘 잘못하고 있는지 제안 할 수 있습니까?

답변

0

파일을 BLOB로 저장하지 않는 것이 좋습니다. 성능면에서는별로 좋지 않습니다.

파일을 서버의 파일 시스템에 저장하고 데이터베이스 저장소에 파일의 경로를 저장해야합니다.

+0

파일 크기는 최대 4MB입니다. 어떤 식 으로든 파일 형식 오류를 표시하는 이유를 알 수 있습니다. – Aaraadhana

1

헤더 항목을 제거하고 수동으로 추가하십시오.

Response.Clear(); 
Response.ClearHeaders(); 
Response.AddHeader("Content-Type", "application/octet-stream"); 
Response.AddHeader("Content-Length", fileFromDatabase.Length.ToString()); 
Response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}", filename)); 
Response.BinaryWrite(fileFromDatabase); 
Response.Flush(); 
Response.End(); 
+0

내가 밖으로 시도하자 ... – Aaraadhana

+0

죄송합니다 그것은 다운로드 후 파일을 여는 동안 같은 오류가 발생합니다. – Aaraadhana

+0

@Aaraadhana - 파일 내용이 잘못 저장되었을 수 있습니다. BLOB 필드의 내용을 디스크 파일에 저장하고 열어 봅니다. – adatapost

관련 문제