Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere? / 25 сообщений из 27, страница 1 из 2
25.07.2005, 12:18
    #33182319
igankr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Добрый день! Вторую неделю бьюсь...
Как отдать zip.файл клиенту, если файл находится в таблице на SQL-Servere?
Туда он забрасывается FOX-ом в поле [text].
Строка таблицы имеет уникальный ID, название файла, и содержимое в [text].

Как я понимаю, один из вариантов - генерация файла в темповый. Можно ли сформировать файл "на лету" (без темпа)?
Если можно (или если нельзя, хотелось бы два варианта), какой нибудь простенький примерчик реализации.
Заранее спасибо.
...
Рейтинг: 0 / 0
26.07.2005, 17:46
    #33185608
igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
igankrДобрый день! Вторую неделю бьюсь...
Как отдать zip.файл клиенту, если файл находится в таблице на SQL-Servere?
Туда он забрасывается FOX-ом в поле [text].
Строка таблицы имеет уникальный ID, название файла, и содержимое в [text].

Как я понимаю, один из вариантов - генерация файла в темповый. Можно ли сформировать файл "на лету" (без темпа)?
Если можно (или если нельзя, хотелось бы два варианта), какой нибудь простенький примерчик реализации.
Заранее спасибо.

ПОМОГИТЕ! Пжлста...
...
Рейтинг: 0 / 0
26.07.2005, 17:57
    #33185638
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
непонятно, он уже зазипованый хранится или еще нет ?
...
Рейтинг: 0 / 0
26.07.2005, 19:03
    #33185745
igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
greenappleнепонятно, он уже зазипованый хранится или еще нет ?
Да, он уже заархивирован. Размер от 2 мб до 20.
...
Рейтинг: 0 / 0
26.07.2005, 20:15
    #33185807
Hratchia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
' читаем в zipField


Response.Clear()

Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition",
"Attachment;FileName=myZipFile.zip")

Response.Write(zipField)

Response.End()


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
26.07.2005, 20:30
    #33185812
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
ну раз он уже сжатый, Response.BinaryWrite(bytes), где bytes - массив байтов из блоба... Только ContentType нужно поставить соответствующий - "application/x-zip-compressed"

Если проблема прочитать из блоба в массив, то вот
...
Рейтинг: 0 / 0
26.07.2005, 23:00
    #33185875
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Response.Write() выведет в данном случае название типа, поэтому все же Response.BinaryWrite.
По ContentType: Лучше передавать "application/x-zip-compressed" - это дефаултный маппинг для *.zip, он входит в 26 hard-coded типов IE. application/octet-stream говорит о том, что передается "что-то другое", восьмибитные бинарные данные. Он привязан к куче самых разных расширений, например *.exe или *.rar, поэтому для того чтобы определить MIME тип в случае передачи application/octet-stream, IE в любом случае будет дополнительно проверять первые 256 байт буфера, и найдет что это application/x-zip-compressed.
...
Рейтинг: 0 / 0
27.07.2005, 11:21
    #33186416
igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Hratchia
' читаем в zipField
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition",
"Attachment;FileName=myZipFile.zip")
Response.Write(zipField)
Response.End()
Posted via ActualForum NNTP Server 1.2
Размер файла на SQL-Servere - 1399 байт, в сформированном zip-файле 1733 байт. Соответственно, zip-файл не читается. В чем может быть дело?
И откуда берутся лишние байты?
...
Рейтинг: 0 / 0
27.07.2005, 11:41
    #33186470
igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
greenappleну раз он уже сжатый, Response.BinaryWrite(bytes), где bytes - массив байтов из блоба... Только ContentType нужно поставить соответствующий - "application/x-zip-compressed"


Response.Clear()
Dim myRow As Data.DataRow
myRow = Dspagedata.Tables("Vibor").Rows(0)
Dim MyData() As Byte
MyData = myRow("textc")

Response.ContentType = "application/x-zip-compressed"
' Response.ContentType = "application/octet-stream" - без разницы какой тип

Response.AppendHeader("Content-Disposition", "Attachment;FileName=myZipFile.zip")
Response.BinaryWrite(MyData)
Response.End()

В этом случае выдает ошибку
...
Рейтинг: 0 / 0
27.07.2005, 14:41
    #33187088
Hratchia
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Скорее всего тайна кроется в этом месте:

Dim myRow As Data.DataRow
myRow = Dspagedata.Tables("Vibor").Rows(0)
Dim MyData() As Byte
MyData = myRow("textc")

проверь сходу размер MyData


Posted via ActualForum NNTP Server 1.2
...
Рейтинг: 0 / 0
27.07.2005, 14:50
    #33187120
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
да тайны то нет :)

ты внутрь файла заглядывал? что там в конце? думаю HTML страницы, ты выводишь на aspx? если да, то this.Visible = false еще нужно
...
Рейтинг: 0 / 0
27.07.2005, 14:59
    #33187151
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
или удалить там все, оставить только <%@ Page ...
...
Рейтинг: 0 / 0
27.07.2005, 16:59
    #33187545
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Hratchia
Скорее всего тайна кроется в этом месте:
Dim MyData() As Byte
MyData = myRow("textc")

Вот как раз в этом месте ошибку и дает MyData = myRow("textc").
Колонка textc на SQL-Servere -> "text". Может проблема в этом?
Использовал этот тип, потому как Fox со своей стороны отказывался работать по другому.
...
Рейтинг: 0 / 0
27.07.2005, 17:46
    #33187663
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Response.Clear()
Response.ContentType = "application/octet-stream"
Response.AppendHeader("Content-Disposition",
"Attachment;FileName=myZipFile.zip")
Response.Write(zipField)
Response.End()

Размер файла на SQL-Servere - 1399 байт, в сформированном zip-файле 1733 байт. Соответственно, zip-файл не читается. В чем может быть дело?
И откуда берутся лишние байты?
Самое интересное, что если на SQL забросить обычный текстовый файл,
все будет ОК (сохранить как zip, переименовать в тхт, и опля - текст в том виде, как сохранял в таблицу).

Скорее всего, в zip-файл в процессе формирования (Response.Write) из таблицы SQL добавляются некоторые символы, которые ДОЛЖНЫ быть в
обычном текстовом файле, вот только что сделать, чтобы
этого не происходило?
...
Рейтинг: 0 / 0
27.07.2005, 19:12
    #33187837
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
хм, а с SqlDbType.Image Fox Pro случайно не работает? Ты прав, в text забивается и возвращается уже строка, а не байты, потому и ошибка в этом месте. Обратно можно, но байты как-то кодируются в строку перед сохранением и делает это Fox pro, лучше бы уж Image.
...
Рейтинг: 0 / 0
27.07.2005, 19:22
    #33187850
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
интересно какая кодировка у response
...
Рейтинг: 0 / 0
28.07.2005, 13:45
    #33189324
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
greenappleхм, а с SqlDbType.Image Fox Pro случайно не работает? Ты прав, в text забивается и возвращается уже строка, а не байты, потому и ошибка в этом месте. Обратно можно, но байты как-то кодируются в строку перед сохранением и делает это Fox pro, лучше бы уж Image.
Fox нормально и сохраняет на SQL и забирает - проверял, все ОК (проверял на zipе). Мне кажется, ASP что то с одержимым делает
...
Рейтинг: 0 / 0
28.07.2005, 15:03
    #33189625
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
я думаю вот что, когда ты работаешь с Fox он берет zip, кодирует байты в строку в какой-то своей кодировке (1251 ?), берет он их оттуда так же точно. Net поступает со строкой так, как у него забито в культуре или по умолчанию utf-8.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
string s1 = "строка";
string s2 = null;

using (FileStream fs = File.OpenRead(@"c:\utfstr.txt")) 
{
	using (StreamReader sr = new StreamReader(fs))
	{
		s2 = sr.ReadToEnd(); 
	}
}

Response.Write(Response.ContentEncoding.GetBytes(s1).Length + "<br>");
Response.Write(System.Text.Encoding.UTF8.GetBytes(s1).Length + "<br>");
Response.Write(System.Text.Encoding.GetEncoding( 1251 ).GetBytes(s1).Length + "<br>");

Response.Write(Response.ContentEncoding.GetBytes(s2).Length + "<br>");
Response.Write(System.Text.Encoding.UTF8.GetBytes(s2).Length + "<br>");
Response.Write(System.Text.Encoding.GetEncoding( 1251 ).GetBytes(s2).Length + "<br>");

<globalization
requestEncoding="windows-1251"
responseEncoding="windows-1251"
/>

выведется

6
12
6
20
38
20

при
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
/>

12
12
6
38
38
20

если добавить Response.ContentEncoding = System.Text.Encoding.UTF8; перед всеми Response.Write то кодировка буфера в web.config изменится на указанную.

я думаю дело в этом, потому что в данном случае ты работаешь со строкой
...
Рейтинг: 0 / 0
28.07.2005, 17:12
    #33190087
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
если добавить Response.ContentEncoding = System.Text.Encoding.UTF8; перед всеми Response.Write то кодировка буфера в web.config изменится на указанную.

БОЛЬШОЕ СПАСИБО! Готовый РАБОТАЮЩИЙ кусок кода (Asp.Net 2.0)

Response.Clear()
Response.AppendHeader("Content-Disposition", "Attachment;FileName=myZipFile.zip")
Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1251")
Response.Write(Dspagedata.Tables("Vibor").Rows(0).Item("textc"))
Response.End()
...
Рейтинг: 0 / 0
28.07.2005, 17:14
    #33190094
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
супер!
...
Рейтинг: 0 / 0
28.07.2005, 17:17
    #33190103
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Response.Clear()
Response.AppendHeader("Content-Disposition", "Attachment;FileName=myZipFile.zip")
Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1251")
Response.Write(Dspagedata.Tables("Vibor").Rows(0).Item("textc"))
Response.End()

Опа... Попробовал разархивировать другой zip-файл- "неожиданный конец архива", т.е. Ошибка. Чего -то туда было дописано, мля
...
Рейтинг: 0 / 0
28.07.2005, 17:32
    #33190138
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
Опа... Попробовал разархивировать другой zip-файл- "неожиданный конец архива", т.е. Ошибка. Чего -то туда было дописано, мля
Разница с "нормальным" zip - 2 байта...

Как я понимаю, нужно "заставить" Fox перенести данные на SQL-Server без
кодировки (т.е. UTF8), и, потом на Asp взять его тоже UTF8
...
Рейтинг: 0 / 0
28.07.2005, 17:52
    #33190197
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
всегда два байта? м.б. конец строки где-то добавляется?
...
Рейтинг: 0 / 0
28.07.2005, 18:03
    #33190234
Igank
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
greenappleвсегда два байта? м.б. конец строки где-то добавляется?
Да нет, 2 байта срезается в файле (в теле файла, например всего 12303 б, на 11198 - 2 байта 5C,0A). Причем, если сначала выяснить размер файла
df = Len(Dspagedata.Tables("Vibor").Rows(0).Item("textc") - УЖЕ не хватает 2 байтов!)
...
Рейтинг: 0 / 0
28.07.2005, 18:08
    #33190250
greenapple
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere?
а SELECT DATALENGTH(textc) FROM ... дает какой размер?
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Как отдать zip.файл клиенту, если файл в таблице на SQL-Servere? / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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