SQL Server의 이진 필드에 업로드 된 파일을 저장하는 것 뿐이며 사용자가 Asp.NET을 사용하여 다운로드 할 수있게해야합니다. 어떻게해야합니까?다운로드 방법 SQL DB에 저장된 이진 형식의 파일
미리 감사드립니다.
SQL Server의 이진 필드에 업로드 된 파일을 저장하는 것 뿐이며 사용자가 Asp.NET을 사용하여 다운로드 할 수있게해야합니다. 어떻게해야합니까?다운로드 방법 SQL DB에 저장된 이진 형식의 파일
미리 감사드립니다.
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에 쿼리 문자열 정보를 전달하여 코드가 데이터베이스에서 가져올 파일을 알 수 있도록 할 수 있습니다.
적절한 확장자가 붙은 파일 스트림 개체로 데이터를 읽고 사용자가 결과 파일을 다운로드하게합니다.
당신은 ...이 같은 파일을 생성하기 위해 파일 스트림에 System.IO BinaryWriter 개체를 사용하는 것이 좋습니다 :
FileStream fs = new FileStream("thisfile.bin", FileMode.Create);
binWriter= new BinaryWriter(fs);
binWriter.Write(varHoldingSqlRetrievedBinaryData);
웹 사이트에 일반 처리기 (.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\"");
그렇다면 어떻게 확장자를 이진 데이터에서 얻을 수 있습니까? – Tarik
그리고 당신이 말한 것을 알고 있기 때문에 약간의 예제 코드를 제공 할 수 있습니다. 그러나 코드 측면에서 예제가 필요할 수 있습니다. ( – Tarik
이렇게 할 방법이 없습니다. 데이터베이스에 확장명을 저장하는 것이 가장 좋습니다. –