Как получить файл из базы данных SQL Server? - PullRequest
0 голосов
/ 23 октября 2009

Я успешно загрузил файлы в базу данных SQL Server. Я могу вернуть информацию в GridView. Я не могу понять, как создать гиперссылку, чтобы открыть файл.

Ответы [ 4 ]

2 голосов
/ 23 октября 2009

Вам необходимо создать URL, который обрабатывает изображения и возвращает содержимое БД в поток ответов. Как это происходит в SQL Saturday # 26 У меня была презентация, которая показала именно это. Вы можете сделать мои слайды и просмотреть их по ссылке, перейти к демонстрации 2, и в решении lotsOfPictures вы найдете Picture.aspx.cs, который выполняет именно то, что вы просите:

using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();

                SqlCommand cmd = new SqlCommand(
@"SELECT picture 
FROM resized_pictures 
WHERE picture_id = @id
AND picture_size = @size;", conn);
                cmd.Parameters.AddWithValue("@id", pictureId);
                cmd.Parameters.AddWithValue("@size", size);

                using (SqlDataReader rdr = cmd.ExecuteReader(
                    CommandBehavior.SequentialAccess))
                {
                    if (rdr.Read())
                    {
                        Response.ContentType = "image/jpeg";
                        byte[] bytes = new byte[1024];
                        long offSet = 0;
                        int countRead = (int) rdr.GetBytes(
                            0, offSet, bytes, 0, 1024);
                        while (countRead > 0)
                        {
                            Response.OutputStream.Write(bytes, 0, countRead);
                            offSet += countRead;
                            countRead = (int)rdr.GetBytes(
                                0, offSet, bytes, 0, 1024);
                        }
                    }
                }
            }

Важными частями головоломки являются флаг SequentialAccess, передаваемый считывателю SqlCommand, который будет возвращать истинный поток, поэтому страница не загружает все изображение в память перед возвратом. Для высокопроизводительного сервера вы должны использовать асинхронные операции, как описано в Асинхронные страницы в ASP.NET 2.0 .

0 голосов
/ 23 октября 2009

Обычно вы используете код на стороне сервера для отправки соответствующих заголовков , а затем просто выводите содержимое.

Из руководства по PHP:

// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
0 голосов
/ 23 октября 2009

Если ваш файл хранится в базе данных, вы, вероятно, храните его в виде блога или байтового массива. В событии щелчка по гиперссылке вам нужно будет передать байтовый массив в поток и использовать средство записи потока для создания файла. Затем выполните файл.

0 голосов
/ 23 октября 2009

Сам не пробовал, но как насчет потоковой передачи данных во временный файл в локальной файловой системе с последующим предоставлением ссылки на этот временный файл?

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