ActiveX для передачи бинарного файла через ASP.Response

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

ActiveX для передачи бинарного файла через ASP.Response

Сообщение mshak » 16.12.2009 (Ср) 10:45

добрый день. никак не могу побороть одну проблему, а именно при передачи бинарного файла в конец файла дописывается мусорные null
передача осуществляется через ASP страницу, на которой вызывается собственный activeX DLL,
вот код компонента
Код: Выделить всё
Option Explicit
'отправка через объект IIS - response
Public Sub Send(ByVal obj As Object, ByVal fileName As String)
    Dim MyFile As Integer
    Dim MyFileLen As Long
    Dim tmpData() As Byte
    Dim blocksCount As Integer
    Dim blockSize: blockSize = 7 ' отправляем блоками по 32000 байт
    Dim sendsBlocks As Integer: sendsBlocks = 0
           
    MyFileLen = FileLen(fileName)
    blocksCount = Int(MyFileLen / blockSize)
   
    MyFile = FreeFile
    Open (fileName) For Binary As #MyFile
        Do While Not EOF(MyFile)
            If (sendsBlocks < blocksCount) Then
                ReDim tmpData(blockSize)
            Else
                ReDim tmpData(MyFileLen - blocksCount * blockSize)
            End If
           
            Get #MyFile, , tmpData
            obj.BinaryWrite tmpData
            sendsBlocks = sendsBlocks + 1
        Loop
    Close #MyFile
'    obj.BinaryWrite "<" & MyFileLen & "|" & blocksCount & "|" & sendsBlocks & "|" & UBound(tmpData) & "|" & LBound(tmpData) & ">"
End Sub

допустим на входе имеем тестовый файл состоящий из символов от 0 до 9 без перевода строки, то на выходе мы получаем эти 10 символов и еще два символа Nul, если раскомментировать последнюю строку то в файл дописывается <10|1|2|3|0> т.е. видно что он д.б. был передать только 10 символов, т.е. два блока 7 и 3 символа.
помогите плз, откуда лишние символы

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение Antonariy » 16.12.2009 (Ср) 13:20

Если бы писали как полагается байтовый массив, а не строку, проблем бы не было.
Лучший способ понять что-то самому — объяснить это другому.

mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение mshak » 16.12.2009 (Ср) 13:57

Код: Выделить всё
    Dim tmpData() As Byte

так вроде как байтовый массив

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение Antonariy » 16.12.2009 (Ср) 14:28

Меня ввела в заблуждение последняя закомментированная строка.
Скучаю по тегу [SOURCE].

Во-первых, нет никакого смысла отправлять блоками без Flush, это буфер, сервер все равно отправит ответ так, как считает нужным.
Во-вторых, что это за "символ Nul" в байтовом массиве?
В-третьих, где заголовок, в котором указано, что это байтовый массив?
Лучший способ понять что-то самому — объяснить это другому.

mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение mshak » 16.12.2009 (Ср) 14:46

Код: Выделить всё
<%
Response.Expires = -1
Response.Clear
Response.Buffer = false
Response.ContentType = "application/octet-stream; charset=windows-1251"
Response.AddHeader "Content-Disposition", "attachment; filename=wwwroot.rar"
'Response.AddHeader "Content-Disposition", "attachment; filename=" & replace(fn, " ", "%20") ' Нужно нормальное кодирование
dim sender: set sender = CreateObject("IISSender.BinarySender")

call sender.Send(Response,"c:\wwwroot.rar")
%>


да вроде как сервер и отдает его блоками....
нул... это я так понимаю символ с нулевым кодом.. (по крайней мере notepad++ его так показывает )
если я правильно понял про заголовок - то АСПшная страница выше, в этом сообщении

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение Antonariy » 16.12.2009 (Ср) 14:55

С кодом отправки понятно, как принимаете? Своими силами или броузером?
Лучший способ понять что-то самому — объяснить это другому.

mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение mshak » 16.12.2009 (Ср) 15:10

браузером..

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение Antonariy » 16.12.2009 (Ср) 16:01

Попробуйте убрать charset из ContentType.
Если это ничего не даст, попробуйте сначала собрать весь байтовый массив целиком и отправить его размер, думаю ошибка в этом цикле с блочной отправкой.
Лучший способ понять что-то самому — объяснить это другому.

mshak
Обычный пользователь
Обычный пользователь
 
Сообщения: 59
Зарегистрирован: 29.01.2008 (Вт) 14:17

Re: ActiveX для передачи бинарного файла через ASP.Response

Сообщение mshak » 17.12.2009 (Чт) 9:44

спасибо за совет. буду пробовать.
Пока временным решением стал ADODB.Stream, отсылка через него нормульно.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 61

    TopList  
cron