ASP.NET 업로드된 파일 SQL 서버 테이블 저장
-
11-09-2019 - |
문제
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
제휴하지 않습니다 StackOverflow