Загрузка файла в базу данных для веб-страниц ASP.Net

У меня возникли проблемы с поиском способа загрузки документа в базу данных в varbinary(max) с веб-страницами ASP.Net 2, и я также хотел бы загрузить его.

Пока что у меня есть это ниже, которое должно загрузить файл в каталог на веб-сайте, но ничего не делает. Любая помощь будет здорово. Спасибо

         var fileName = "";
         var fileSavePath = "";
         int numFiles = Request.Files.Count;
         int uploadedCount = 0;
         for (int i = 0; i < numFiles; i++)
         {
             var uploadedFile = Request.Files[i];
             if (uploadedFile.ContentLength > 0)
             {
                 fileName = Path.GetFileName(uploadedFile.FileName);
                 fileSavePath = Server.MapPath("~/UploadedFiles/" +
                   fileName);
                 uploadedFile.SaveAs(fileSavePath);
                 uploadedCount++;
             }
         }
         message = "File upload complete. Total files uploaded: " +
           uploadedCount.ToString();

person Patient Professional    schedule 12.10.2014    source источник
comment
Выбрасывает ли он исключения. Эта часть кода когда-либо вызывалась? Что он не делает?   -  person Alexander    schedule 12.10.2014
comment
Да называется. Он работает без каких-либо ошибок, но ничего не загружает. Я использую базу данных Azure, поэтому я решил вместо этого попробовать использовать varbinary(max) способ хранения файлов, но я не могу найти примеров его использования на веб-страницах.   -  person Patient Professional    schedule 12.10.2014
comment
Если мои глаза не обманывают меня, где в приведенном выше коде задействован database?   -  person EdSF    schedule 13.10.2014


Ответы (2)


Следующий код находится в верхней части страницы, где вы загружаете файл. Обратите внимание, что вы должны изменить имена таблиц и полей в соответствии с вашей базой данных. Кроме того, вы должны убедиться, что форма, которая включает в себя элемент управления загрузкой, имеет атрибут enctype, установленный на multipart/form-data:

@{ 
    int id = 0;
    var fileName = "";
    var fileMime = "";
    if (IsPost) {
        var uploadedFile = Request.Files[0];
        fileName = Path.GetFileName(uploadedFile.FileName);
        if(fileName != String.Empty)
        {
            fileMime = uploadedFile.ContentType;
            var fileStream = uploadedFile.InputStream;
            var fileLength = uploadedFile.ContentLength;

            byte[] fileContent = new byte[fileLength];
            fileStream.Read(fileContent, 0, fileLength);
            var db = Database.Open("FileUploading");
            var sql = "INSERT INTO Files (FileName, FileContent, MimeType) VALUES (@0,@1,@2)";
            db.Execute(sql, fileName, fileContent, fileMime);
        }
    }
}

Чтобы отобразить файл из базы данных, вам нужен отдельный файл «обработчик», который содержит только этот код:

@{
    int id = 0;
    if(Request["Id"].IsInt()){
        id = Request["Id"].AsInt();
        var db = Database.Open("FileUploading");
        var sql = "Select * From Files Where FileId = @0";
        var file = db.QuerySingle(sql, id);
        if(file.MimeType.StartsWith("image/")){
            Response.AddHeader("content-disposition", "inline; filename=" + file.FileName);
        } else {
            Response.AddHeader("content-disposition", "attachment; filename=" + file.FileName);
        }
        Response.ContentType = file.MimeType;
        Response.BinaryWrite((byte[])file.FileContent);
    }
}

Этот файл используется в качестве атрибута src для файла изображения или в качестве URL-адреса для ссылки на файл, который необходимо загрузить, например файл PDF или Word. Если вы назовете этот файл обработчика «download.cshtml», ссылка на файл изображения, сохраненный в базе данных, должна выглядеть следующим образом:

<img src="download.cshtml?Id=@id" alt="" />

где значение параметра Id — это идентификатор файла в базе данных. Ссылка для скачивания выглядит так:

<a href="download.cshtml?Id=@id">Click Here</a>

Все это было взято из моей статьи: http://www.mikesdotnetting.com/Article/148/Save-And-Retrieve-Files-From-a-Sql-Server-CE-Database-with-WebMatrix . Единственная разница между статьей, посвященной базе данных SQL Compact, заключается в том, что тип данных для файлов в SQL CE — image, а не varbinary(max) в SQL Server.

person Mike Brind    schedule 13.10.2014
comment
Большое спасибо! Вы легенда! - person Patient Professional; 13.10.2014

на основе вашего кода.. вы не загружаете изображение в базу данных. вместо этого вы сохраняете изображение в своей папке, которая находится в вашем корне / UploadedFiles

чтобы сохранить изображение в базе данных.. вы должны использовать этот код..

using (Stream fs = uploadedFile.PostedFile.InputStream)
            {
                using (BinaryReader br = new BinaryReader(fs))
                {
                    byte[] bytes = br.ReadBytes((Int32)fs.Length);
                    string contentType = uploadedFile.PostedFile.ContentType;
                    SqlParameter[] arParams = new SqlParameter[2];
                    arParams[0] = new SqlParameter("@ID", SqlDbType.Int);
                    arParams[0].Value = 1; 'example
                    arParams[1] = new SqlParameter("@contentType", SqlDbType.Varchar(50));
                    arParams[1].Value = contentType;
                    arParams[2] = new SqlParameter("@document", SqlDbType.Varbinary(MAX));
                    arParams[2].Value = bytes;
                    SqlHelper.ExecuteNonQuery(SQLConn, CommandType.StoredProcedure,                     "Upload_Attachment", arParams);

                }
            }
person mokh223    schedule 13.10.2014
comment
Не могли бы вы рассказать мне, как я могу реализовать этот код? - person Patient Professional; 13.10.2014
comment
сначала вам нужно создать таблицу, содержащую идентификатор, тип содержимого и документ. Затем вам нужно создать хранимую процедуру, содержащую оператор вставки, и назвать хранимую процедуру Upload_Attachment. то вы можете использовать этот код. - person mokh223; 15.10.2014