скачать бинарный файл из базы данных - PullRequest
1 голос
/ 04 мая 2010

У меня есть двоичный файл в базе данных. Как я могу сделать загрузку этого файла в заголовке страницы при нажатии кнопки

Есть идеи ??

Ответы [ 2 ]

2 голосов
/ 04 мая 2010

Что ж, если вы генерируете файл с помощью скрипта, самый распространенный способ, которым сценарий говорит, что выводит это отправка HTTP-заголовка, который выглядит примерно так:

Content-Type: text/html; charset=utf-8

, что сделаетБраузер отображается как текст.Чтобы заставить [большинство браузеров] загрузить файл, вам необходимо отправить следующие дополнительные заголовки:

Content-Type: application/zip
Content-Disposition: inline; filename=test.zip
Content-Length: 8192

[FILE CONTENTS]

в качестве примера для ZIP-файла объемом 8 КБ с именем «test.zip».Если вы можете найти способ изменить заголовки, отправленные с помощью скрипта, который генерирует файл (т.е. извлекает его из базы данных), то это, скорее всего, заставит браузер интерпретировать файл как загружаемый.

Затем,просто ссылка на скрипт в вашем заголовке.

1 голос
/ 04 мая 2010

Хорошо, есть пара вещей, которые вы, возможно, пытаетесь сделать, не совсем понятно, но я попробую. Допустим, у вас есть следующая базовая база данных, состоящая из идентификатора файла и информации о двоичном файле:

CREATE TABLE Test
(
FileId int identity(1,1) PRIMARY KEY,
FileData varBinary(max)
)

Вам нужна страница (в данном случае называемая «GetFile.aspx») со следующим значением в событии Page_Load кода:

    'Make sure we've got a querystring
    If String.IsNullOrEmpty(Request.QueryString("fileid")) Then
        Throw New ApplicationException("Missing querystring parameter FileId")
    End If
    Dim FileId As Integer
    'Make sure the querystring is an Int
    If Not Integer.TryParse(Request.QueryString("fileid"), FileId) Then
        Throw New ApplicationException("Malformed querystring parameter FileId")
    End If
    'Change YourDsnHere to point to your database
    Using Con As New SqlConnection("YourDsnHere")
        Con.Open()
        'Select the file
        Using Com As New SqlCommand("SELECT * FROM Test WHERE FileId=@FileId", Con)
            Com.CommandType = Data.CommandType.Text
            Com.Parameters.AddWithValue("@FileId", FileId)
            Using RDR = Com.ExecuteReader()
                If RDR.Read Then
                    'Get the data out as a byte array
                    Dim Bytes() = DirectCast(RDR.Item("FileData"), Byte())
                    'Clear all response headers
                    Response.Clear()
                    'Set the type, my sample is a RAR file, you'll need to look up MIME types for yours
                    Response.AddHeader("Content-Type", "application/x-rar-compressed")
                    'Set the name of the file, if you don't set it browsers will use the name of this page which you don't want
                    Response.AddHeader("Content-Disposition", "inline; filename=YourFilenameHere.rar")
                    'Optional but nice, set the length so users get a progress bar
                    Response.AddHeader("Content-Length", Bytes.Count.ToString())
                    'Push the bytes out raw
                    Response.BinaryWrite(Bytes)
                    'Close the response stream so no more HTML gets accidentally pushed out
                    Response.End()
                Else
                    'Error, no file was found
                End If
            End Using
        End Using
        Con.Close()
    End Using

Затем на вашей странице, когда человек нажимает кнопку, направьте его на эту страницу, убедившись, что в строке запроса указан правильный fileid.

Как я уже сказал, я думаю, это то, что вы ищете, если нет, уточните ваше описание выше

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