2009-12-14 2 views

답변

7

Here's a Microsoft Knowledge Base article on this.

방법 데이터베이스에서 파일을 검색을 사용하는 데이터 액세스 기술에 따라 다릅니다. 파일 배열이 포함 된 바이트 배열 data (예 : DataSet을 채우고 필드에 액세스)과 일부 문자열 filename이 있다고 가정합니다.

Response.Clear() 
Response.ContentType = "application/octet-stream" 
Response.AddHeader("Content-Disposition", "attachment;filename=""" & filename & """") 
Response.BinaryWrite(data) 
Response.End() 

위 코드를 일부 download.aspx에 입력하고이 파일에 링크하십시오. download.aspx에 쿼리 문자열 정보를 전달하여 코드가 데이터베이스에서 가져올 파일을 알 수 있도록 할 수 있습니다.

3

적절한 확장자가 붙은 파일 스트림 개체로 데이터를 읽고 사용자가 결과 파일을 다운로드하게합니다.

당신은 ...이 같은 파일을 생성하기 위해 파일 스트림에 System.IO BinaryWriter 개체를 사용하는 것이 좋습니다 :

FileStream fs = new FileStream("thisfile.bin", FileMode.Create); 
binWriter= new BinaryWriter(fs);  

binWriter.Write(varHoldingSqlRetrievedBinaryData); 
+0

그렇다면 어떻게 확장자를 이진 데이터에서 얻을 수 있습니까? – Tarik

+0

그리고 당신이 말한 것을 알고 있기 때문에 약간의 예제 코드를 제공 할 수 있습니다. 그러나 코드 측면에서 예제가 필요할 수 있습니다. ( – Tarik

+0

이렇게 할 방법이 없습니다. 데이터베이스에 확장명을 저장하는 것이 가장 좋습니다. –

2

웹 사이트에 일반 처리기 (.ashx) 페이지를 추가하십시오. 에서 입증 된 바와 같이 원하는 경우, 당신은 또한 Content-Disposition 헤더를 설정할 수 있습니다

using System; 
using System.Web; 
using System.IO; 

namespace ASHXTest 
{ 
    public class GetLetter : IHttpHandler 
    { 
     public void ProcessRequest(HttpContext context) 
     { 
      // Get letter parameter from query string. 
      string fileName = context.Request.MapPath(string.Format("{0}.png", 
       context.Request.QueryString["letter"])); 

      // Load file from disk/database/ether. 
      FileStream stream = new FileStream(fileName, FileMode.Open, 
       FileAccess.Read); 
      byte[] buffer = new byte[stream.Length]; 
      stream.Read(buffer, 0, buffer.Length); 
      stream.Close(); 

      // Write response headers and content. 
      context.Response.ContentType = "image/png"; 
      context.Response.OutputStream.Write(buffer, 0, buffer.Length); 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

: 아래의 ASHX 코드를 본체 (이 경우 디스크에서 PNG 파일) 임의의 스트림을 읽고 응답을 쓰는 방법을 보여줍니다 Heinzi의 답변 :

context.Response.AddHeader("Content-Disposition", 
    "attachment;filename=\"letter.png\""); 
관련 문제