0 / 0 / 0
Регистрация: 01.10.2012
Сообщений: 112
1

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

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

Author24 — интернет-сервис помощи студентам
Всем привет. Я пишу небольшую программу на 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.04.2018, 21:53
Ответы с готовыми решениями:

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

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

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

Выгрузка файла HttpWebRequest!
Доброго времени суток ! Хотел выгрузить файл! А точнее видео в вк ! Что смог набросал не понимаю...

0
12.04.2018, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.04.2018, 21:53
Помогаю со студенческими работами здесь

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

Выгрузка информации и Bat файла
Добрый день. Через батник запускается 2 команды cd C:\Users\Avrelian\Desktop\analiz\ ...

Выгрузка файла ресурсов на диск
Загвоздка. Неоходимо выгрузить файл из ресурсов: то-есть при необходимости создать копию файла...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru