Открыть файл Word, хранящийся в SQL Server - PullRequest
0 голосов
/ 05 июля 2018

Мы успешно добавляем текстовые документы в наш SQL Server (столбец varbinary) с использованием некоторых веб-форм, а затем хотим, чтобы некоторые наши сотрудники могли их загружать.

У нас есть некоторый код для его отображения, но иногда он отображается (в моем локальном окружении), иногда нет, но затем, когда он запускается в производство. Итак, мы просто хотим скачать его, не важно, открывается ли он или нет (если у вас не установлен Word), мы просто хотим загрузить его, что-то вроде «Сохранить как ... . "функция. Потому что в моей локальной среде он работает хорошо, но когда он запускается на сервере IIS, мы не можем получить файл (я полагаю, это потому, что он автоматически открывает WORD).

Вот код для его получения.

    public string showDoc(int id, int numRef)
    {
        string fileName = Path.GetTempFileName() + ".docx";
        Db.Open();
        string cuerito = "select doc from tbl_references where [userId]=@id and [refNum]=@numRef";
        SqlCommand command = new SqlCommand(cuerito, base.Db);
        command.Parameters.AddWithValue("@id", id);
        command.Parameters.AddWithValue("@numRef", numRef);
        using (SqlDataReader dr = command.ExecuteReader())
            {
                while (dr.Read())
                {
                    int size = 1024 * 1024;
                    byte[] buffer = new byte[size];
                    int readBytes = 0;
                    int index = 0;

                    using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
                    {
                        while ((readBytes = (int)dr.GetBytes(0, index, buffer, 0, size)) > 0)
                        {
                            fs.Write(buffer, 0, readBytes);
                            index += readBytes;
                        }
                    }

            }
        }
        Db.Close();
        return fileName;
    }

Есть ли способ в C # просто сделать это? Не отображать, а загружать только с SQL Server?

EB.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Весь приведенный выше код считывает некоторые данные из двоичного поля и записывает их в поток, который записывается на диск на сервере. Нет необходимости сохранять файл на диск перед тем, как предлагать его для загрузки, вы можете просто передать данные непосредственно клиенту - есть множество примеров и предыдущих вопросов, содержащих рабочие примеры этого процесса, если вы его Google. Они будут работать с любым файлом, все это не относится к файлам Word. И ничего из этого не имеет отношения к взаимодействию.

Кстати, загружается ли файл непосредственно на диск пользователя или открывается (сохраняется во временной папке на компьютере пользователя), в значительной степени зависит от конфигурации компьютера пользователя, какой браузер они используют, установлен ли плагин Word в этом браузере их общие настройки загрузки. Вы можете установить заголовки HTTP (опять же Google), которые подсказывают браузеру просто сохранить файл вместо того, чтобы пытаться открыть его, но в конечном итоге он контролируется браузером, а не сервером.

Вот один достаточно простой пример отправки двоичных данных из таблицы базы данных в виде файла для загрузки: https://ygtechme.wordpress.com/2012/08/27/downloading-file-from-database-using-c-asp-net/. Есть еще десятки похожих с небольшими изменениями в теме, доступных в сети. Но это общая идея.

0 голосов
/ 05 июля 2018

Код, который вы разместили, уже делает то, что вы просите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...