powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Download файлов на клиент.
11 сообщений из 11, страница 1 из 1
Download файлов на клиент.
    #33737862
PeterSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В БД хранятся файлы. Нужно дать возможность пользователю закачивать их себе через броузер. На что должен указывать линк? Ведь такого файла нет на диске, а у нас можно сказать есть только массив байтов.
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33737882
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНа что должен указывать линк?
на страницу которая по параметрам будет обращаться к бд, читать от туда инфу и, пересылать клиенту в виде файла...
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33737923
PeterSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея понятна.
А как клиенту "пересылать клиенту в виде файла". Есть пример какой-нибудь? Какие там заголовки писать, через какие классы? Что бы у клиента выскачил file-download диалог в броузере?
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33738041
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33742094
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не сделайте ошибки ! Если файлы мелкие, то всё равно как вы довнлоад реализуете, а вот если они больше 100МБ могут быть, то не читайте эти файлы в массив байт, а сразу напрямую отдавайте кусочками клиенту. Сильно экономит памть на сервере знаете ли.
Удачи !

-------------------------------------------------------------------------
Скоро может начаться такая борьба за мир, что камня на камне не останется.
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33742723
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНе сделайте ошибки ! Если файлы мелкие, то всё равно как вы довнлоад реализуете, а вот если они больше 100МБ могут быть, то не читайте эти файлы в массив байт, а сразу напрямую отдавайте кусочками клиенту.
с этого места можно поподробнее...
имеем:
Код: plaintext
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.
50.
51.
52.
53.
54.
           Dim filepath As String = "ля-ля-ля..."            
          
            Dim buffer( 10000 ) As Byte

            ' Length of the file:
            Dim length As Integer

            ' Total bytes to read:
            Dim dataToRead As Long

            ' Identify the file name.
            Dim filename As String = System.IO.Path.GetFileName(filepath)

            Try
                ' Open the file.
                iStream = New System.IO.FileStream(filepath, System.IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)

                ' Total bytes to read:
                dataToRead = iStream.Length

                Response.ContentType = "application/octet-stream"
                Response.AddHeader("Content-Disposition", "attachment; filename=" & filename)

                ' Read the bytes.
                While dataToRead >  0 
                    ' Verify that the client is connected.
                    If Response.IsClientConnected Then
                        ' Read the data in buffer
                        length = iStream.Read(buffer,  0 ,  10000 )

                        ' Write the data to the current output stream.
                        Response.OutputStream.Write(buffer, 0, length)

                        ' Flush the data to the HTML output.
                        Response.Flush()

                        ReDim buffer( 10000 ) ' Clear the buffer
                        dataToRead = dataToRead - length
                    Else
                        'prevent infinite loop if user disconnects
                        dataToRead = - 1 
                    End If
                End While

            Catch ex As Exception
                ' Trap the error, if any.
                'Response.Write("Error : " & ex.Message)
            Finally
                If IsNothing(iStream) = False Then
                    ' Close the file.
                    iStream.Close()
                End If
                Response.End()
            End Try

Такой код попадает в указанную идеологию или необходимы радикальные изменения? ;)
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33742904
Krolikoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще один способ: перед закачкой сохранять файл на сервере с уникальный именем (используя например имясессии), а потом уже давать на него ссылку. Если файл большой - делать это по частях.
Недостаток: при большом количестве больших файлов нужен эфективный механизм очистки их временных копий на сервере.
Недостаток хранения файлов в базе вообще: невозможно докачка больших файлов.
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33742909
Krolikoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, ReDim лучше не использовать. Ресурсов много жрет
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33742955
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vladgrig
с этого места можно поподробнее...
имеем:
.
.
.
Такой код попадает в указанную идеологию или необходимы радикальные изменения? ;)

В общем и целом "из той оперы", но нужны изменения, хоть и не радикальные.
Задача: НАПРЯМУЮ из БД, а не как некоторые предлагают через "папку обмена" на сервере, отдавать файл клиенту. Зачем же заставлять ждать пока файл на сервер из БД выгрузится?! Ведь прогресс тут показать не удасться. И получится, что чел ткнул на линк и.... долгое время ничего не происходит.

Для прогресса нужно добавить:
Response.AppendHeader("Content-Length", v_FileSize.ToString());
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33752297
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, вот такой код пересылает файл, но предположим при скорости 500 кб/с (размер файла более 150 Мб) при закачке 90-120 Мб разрывается коннект и закачка прекращается... бляха запарило это дело - думаю, где могут быть грабли... может у кого есть идеи или кто сталкивался с такой траблой?
...
Рейтинг: 0 / 0
Download файлов на клиент.
    #33752612
Фотография vladgrig
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем спасибо!!! Заработало!!!
Решение - для себя (может и для таких же как я ;)
web.config
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
<configuration>
   <system.web>
      <httpRuntime maxRequestLength="4000"
         useFullyQualifiedRedirectUrl="true"
         executionTimeout="45"
         versionHeader=""/>
   </system.web>
</configuration>
секция - executionTimeout - была 180 (3 мин.) - поставил на час ;) = 6000
P.S. LOL - век живи - век учись - дураком помрёшь...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Download файлов на клиент.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]