문제

ASP.net 웹 양식을 통해 업로드된 파일을 SQL Server 2005 varbinary(max) 필드에 어떻게 저장합니까?

지금까지 내가 가진 것은 다음과 같습니다.

protected void btnUpload_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        StoreFile(Request.Files[i]);
    }
}

private void StoreFile(HttpPostedFile file)
{
    // what do i do now?
}

평범한 오래된 ado.net 예제가 좋을 것입니다.linq to sql 예제도 마찬가지입니다.

감사해요

도움이 되었습니까?

해결책

파일을 데이터베이스에 직접 업로드하는 방법에 대한 훌륭한 자습서가 있습니다. 4Guysfromrolla

다른 팁

LINQ에서 SQL을 사용 하여이 작업을 수행 한 방법은 다음과 같습니다.

FilesDataContext db = new FilesDataContext();

protected void btnUpload_Click(object sender, EventArgs e)
{
    for (int i = 0; i < Request.Files.Count; i++)
    {
        StoreFile(Request.Files[i]);
    }

    db.SubmitChanges();
}

private void StoreFile(HttpPostedFile file)
{
    byte[] data = new byte[file.ContentLength];
    file.InputStream.Read(data, 0, file.ContentLength);

    File f = new File();
    f.Data = data;
    f.Filename = file.FileName;
    db.Files.InsertOnSubmit(f);
}

이는 일반적으로 나쁜 형태로 간주됩니다.이는 데이터베이스를 부풀리고 모든 파일을 하드 드라이브 폴더에 보관하고 파일 위치를 DB에 저장하는 것보다 실제로 어떤 이점도 제공하지 않습니다.정말로 이 작업을 수행하시겠습니까?

다음은 Ronnie의 답변에 대한 빠른 리팩터입니다.

Public Shared Sub SaveUploadedFile(File As HttpPostedFile)
  Dim oFile As Db.File

  oFile = New Db.File
  oFile.Data = File.ToBytes
End Sub

<Extension()>
Public Function ToBytes(File As HttpPostedFile) As Byte()
  ToBytes = New Byte(File.ContentLength - 1) {}

  Using oStream As Stream = File.InputStream
    oStream.Read(ToBytes, 0, File.ContentLength)
  End Using
End Function

HTH

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top