سؤال

كيف يمكنك تخزين ملف تم تحميله بواسطة Webform 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 إلى مثال 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);
}

هذا يعتبر عموما شكل سيء. إنه Bloats قاعدة البيانات الخاصة بك ولا يقدم أي مزايا حول الحفاظ على جميع الملفات في مجلد محرك الأقراص الثابتة وتقوم بتخزين موقع الملف الموجود في DB. هل انت متأكد من أنك تريد أن تفعل هذا؟

إليك عددا سريعا لإجابة روني:

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

هذر

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top