Открытый файл Word, хранящийся в SQL Server

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

У нас есть код для его отображения, но иногда он отображается (в моей локальной среде), иногда это не так, но потом, когда он переходит в «Производство». Итак, мы просто хотим его загрузить, неважно, открывается ли он или нет (если у вас нет установленного 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.

c#,asp.net,sql-server,webforms,

0

Ответов: 2


0

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

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

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


-1

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

C #, asp.net, SQL-сервер, WebForms,
Похожие вопросы