Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: ASP.NET MVC
Войти
Регистрация
Восстановить пароль
 
Kazin94
0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 112
1

Выгрузка файла из БД

12.04.2018, 21:53. Просмотров 434. Ответов 0
Метки нет (Все метки)

Всем привет. Я пишу небольшую программу на ASP.NET, связанную с БД PostgreSQL, и столкнулся с проблемой выгрузкой файлов из базы данных.

Вот таблица Документы

SQL
1
2
3
4
5
6
7
CREATE TABLE document
(
  documentid uuid NOT NULL,
  documentname CHARACTER VARYING(100),
  author CHARACTER VARYING(100),
  contents bytea
)
Все данные я заполняю функцией, где она сначала ищет текущего пользователя таблицы и в его строку в таблице заносит данные. Далее, я создал функцию, которая вытаскивает мне contents опять же с помощью запроса (сначала ищет текущего пользователя, потом его документы)

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE OR REPLACE FUNCTION public.selectdocument(IN id uuid)
  RETURNS TABLE(contents bytea) AS
$BODY$
DECLARE 
comm VARCHAR;
nameuser VARCHAR;
BEGIN
SELECT CURRENT_USER INTO STRICT nameuser;
comm:='SELECT contents from document_'||nameuser||' where documentid = '||quote_literal(id)||';';
RETURN QUERY EXECUTE comm;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
Далее на ASP.NET я создал класс документов

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace WebApplication4.Entites
{
    public class Documents : BaseEntity
    {
        public Guid DocumentId { get; set; } = new Guid();
 
        public String DocumentName { get; set; }
 
        public byte[] Contents { get; set; }
 
        public String DocumentIntroNumber { get; set; }
 
        public DateTime DateIntro { get; set; }
    }
}
Создал метод в контроллере

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
namespace WebApplication4.Controllers
{
    public class DocumentsController : Controller
    {
        private readonly DocumentsRepository dRepository;
        private string connectionString;
 
        public DocumentsController(IConfiguration configuration, IConfiguration iconfiguration)
        {
            dRepository = NEW DocumentsRepository(configuration);
            connectionString = iconfiguration.GetValue<string>("DBInfo:ConnectionString");
        }
 
        internal IDbConnection Connection
        {
            GET
            {
                RETURN NEW NpgsqlConnection(connectionString);
            }
        }
 
         //плюс тут методы вытаскивания всех записей
 
        [HttpGet]
        public FileResult GetFile(Guid DocumentId)
        {
            USING (IDbConnection dbConnection = Connection)
            {
                dbConnection.Open();
                var RESULT = dbConnection.Query<Documents>("SELECT selectdocument(@DocumentId)", NEW { DocumentId = DocumentId }).FirstOrDefault();
                RETURN File(RESULT.Contents.ToString(), "application/jpg");
            }
        }
    }
}
И наконец вывожу всё в Index.cshtml

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
@model IEnumerable<WebApplication4.Entites.Documents>
 
@{
    ViewData["Title"] = "Index";
}
 
<h2>Index</h2>
 
<p>
    <a asp-action="Create">Добавить новый документ</a>
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.DocumentName)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.Contents)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DocumentIntroNumber)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.DateIntro)
        </th>
        <th></th>
    </tr>
 
    @foreach (var item in Model)
    {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.DocumentName)
            </td>
            <td>
                @Html.ActionLink("Загрузить файл", "GetFile", new { id = item.DocumentId })  
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DocumentIntroNumber)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.DateIntro)
            </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.DocumentId">Edit</a> |
            </td>
        </tr>
    }
</table>
Но беда в том, что при попытке выгрузки файла система выдаёт ошибку "Object reference not set to an instance of an object." на строке return File(result.Contents.ToString(), "application/jpg");

Помогите понять, пожалуйста, в чём дело и как это исправить?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2018, 21:53
Ответы с готовыми решениями:

Скрытая выгрузка файла на сервер
Vozmozhno li vgruzit na server zaranee vibraniy file tak, chtobi ne nado bilo yego vibirat cherez...

Автоматическая выгрузка файла от сервера к клиенту
Итак, имеем файл а сервере (напр. тест.txt). На него ведет линк. Клиент щелкает по линку. Нужно:...

ASP.NET MVC + jquery выгрузка файла
Доброго времени суток. Наткнулся на такую ситуацию: есть форма и вней кнопка типа button. На jquery...

Закчка МНТМЛ файла БД! Выгрузка его! И отображение на странице!
Есть МНТМЛ файл(Веб архив) По структуре напоминает простой НТМЛ и открываеться всеми наиболее...

Выгрузка файла
Всем привет. Появилась задача обновить старую версию бгу, но оставить изменения в конфигурации...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2018, 21:53

Выгрузка файла на файлообменник.
Доброй всем ночи! Вопрос конечно странный. Но все же прошу серьезно отнестись и по возможности мне...

Выгрузка файла из вложения
Здравствуйте, уважаемые. таблица ТФайлы имеет 2 поля - вложение и название. названия скорее для...

Выгрузка файла из проекта
Доброго времени суток! Народ подскажите может кто знает у меня в проект добавлен файл любой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru