Adodb stream не удается записать файл
Добрый день!
Третий день бьюсь с подписью АлкоДеклараций прямо из 1С.
Использую MS-CapiCom через JS-скрипт. Вот фрагмент кода, который именно отвечает за подписание файла:
СтрКода = "function SignFile(FileName,Cert,OutFileName)
| <
| InStream=new ActiveXObject(""ADODB.Stream"");
| InStream.Type=1; // binary data
| InStream.Mode=3; // read/write
| InStream.Open();
| InStream.LoadFromFile(FileName);
| InData=InStream.Read(-1);
|
| Signer=new ActiveXObject(""CAPICOM.Signer"");
| Signer.Certificate=Cert;
| Signer.Options=2; // CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
| SignedData=new ActiveXObject(""CAPICOM.SignedData"");
| SignedData.Content=InData;
| OutSignedData=SignedData.Sign(Signer,0,1);
|
| OutStream=new ActiveXObject(""ADODB.Stream"");
| OutStream.Type=2; // text data
| OutStream.Mode=3; // read/write
| OutStream.Open();
| OutStream.WriteText(OutSignedData);
| OutStream.SaveToFile(OutFileName,2);
| OutStream.Close();
|
| return(0);
|>
|";
JS.AddCode(СтрКода);
Рез = JS.Modules("Global").CodeObject.SignFile(ИмяФайла,ВыбСертификат,ИмяВыхФайла);
Чтение: InStream.Type=1; // binary data
Запись, после подписания: OutStream.Type=2; // text data
Почему читает бинарные данные, а записывает текстовые?
Пробовал делать одинаковые, пишет, что "не доступно в данном контексте".
Может у кого-то есть рабочий пример JS-скрипта, для подписи, работающий из 1С, поделитесь плиз?
(1) Да. Код не мой, так было написано в исходной обработке.
Не понятно почему:
Тут, собственно само подписание, и потом запись файла:
Пробовал поиграть с типами потоков(Stream.Type), делал одинаковыми на входе и на выходе, и 1 и 2, перестает работать совсем, пишет "ADODB.Stream: Операция не допускается в данном контексте.".
Сделал для пробы вот так:
И при открытии файла и при записи устанавливаю тип - бинарный, подпись убираю - комментирую строку SignedData.Sign(Signer,0,1), передаю данные без изменений OutSignedData = InData. На выходе получаю файл без изменений, абсолютно одинаковый с исходным. Думал, ура, получилось, осталось только подписание раскомментировать! Но, нет. Ошибку выдает: "ADODB.Stream: Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом."
Странно, я же в самом подписании ничего не менял, и до него тоже, файл прочитывается в поток так-же, только сохраняется по другому.
(2) может быть и правильно. На вход вы получаете данные в виде строки неограниченной длины (если верно помню). А выход зависит от формата подписи, и если он MIME, то это вполне себе текст. Вам подпись в MIME формате получить надо или вы сами не знаете в каком?
(5)Я действительно не знаю в каком. Знаю только, что кодировка должна быть "DER".
В общем, похоже, с моими знаниями в этом вопросе, я вряд-ли разберусь с этой задачей. Будем пока внешними программами подписывать/шифровать, благо их много, есть и бесплатные. Жаль конечно, хотелось прямо из 1С получать готовый к отправке файл :(
(5) Там, по-моему, и своя штатная утилита командной строки есть в CryptoPro.
В общем, у меня года два назад стояла подобная задача для подписания документов ЮЗДО. Но я делал самостоятельную приблуду (бота) на VBS. Код подписания в ней выглядит так:
' -----------------------------------------------------------------------------------------
' Подписание файла. Подпись кладется по тому же пути, где находится исходный файл, с
' расширением bin
Если чего-то будет непонятно, спрашивайте здесь, попробую ответить. Я в целом плясал от уже имеющегося файла и имеющейся правильной подписи: просто подогнал параметры метода Sign и опции, чтобы получить такой же файл подписи.
' -----------------------------------------------------------------------------------------
' Поиск сертификата в хранилище
'
Далее в главной функции:
if not Cert is nothing Then
CertSHA1Hash - глобальная строка, которая содержит SHA1-хэш подписи для поиска в хранилище, по сути это уникальный ключ по которому можно найти сертификат. Взять эту строку можно из свойств сертификата.
(7)В АлкоДекларациях не так:
Там файла отдельного для подписи нет. Подпись присоединянтся к основному файлу, как-бы "внедряется" в него. В итоге, файл подписанный отличается от исходного чуть-большим размером, и к нему дописывается через точку расширение "sig", вот так: XXXXXXXXXXXX.xml.sig . Потом, далее, его архивируют, он становится: XXXXXXXXXXXX.xml.sig.zip , и далее его шифруют с сертификатами получателей, и на выходе он получается: XXXXXXXXXXXX.xml.sig.zip.enc
Никаких отдельных файлов не создается(точнее, создаются временные и удаляются), все в исходном.
Если подписывать обработкой с InfoStarta, так все в целом и происходит. Только на выходе получается файл нечитаемый, с ощибкой формата, не открывается ни чем.
Когда начал разбираться, решил "отловить" через отладчик временные файлы до того, как обработка их удалит. Выяснилось, что уже после подписания, файл "портится", становится нечитаемым. Если открыть его блокнотом(Notepad++), то в нем двоичные(или в неправильной кодировке?) символы, ничего общего со структурой исходного файла не имеющие. Если подписать этот-же файл например КриптоАРМом, то при просмотре видно его XML содержимое, и только в начале и в конце небольшие вставки двоичного кода(судя по всему - сама ЭЦП). Дальнейшее архивирование проходит нормально, ZIP-"раззиповывается", а с шифрованием похоже та-же беда, не расшифровывается КриптоАРМом, с сертификатом получателя. Думаю, причина тут одна, что при подписи, что при шифровании. Какая-то мелочь, какой-нибудь параметр не верный.
По сути, все подписание происходит вот здесь:
Все как-бы прозрачно, не понятны только параметры "0,1", но смотред в других примерах, там примерно то-же самое.
и да, если вы откажетесь от Base64, то выходной поток у вас, скорее всего, должен быть бинарным, потому что иначе "хвостик" электронной подписи не запишется или будет поврежден.
(15) я вам ссылку дал, там разжевано для чего параметры. Они вам нужны, поэтому надо хорошо понимать что вы делаете.
Понятно, так и есть. Второй параметр "0" - то, что подпись в файле внутри, а третий "1" - кодировка.
Спасибо за ссылку, вечером займусь изучением теории.
Не дотерпел до вечера. Почитал. Надо попробовать с третьим параметром поиграть. Возможно "тут собака порылась". Вот только не совсем понятно, как параметр передавать, просто по его индексу в табличке? С нуля или с единицы начинается?
Если в исходной обработке передается "1", это что -
CAPICOM_ENCODE_ANY
или
CAPICOM_ENCODE_BASE64 - ?
В моем случае, что должно быть?
Вечером попробую поэкспериментировать, сейчас просто уже не могу, "труба" зовет.
Data is saved as a base64-encoded string or a pure binary sequence. This encoding type is used only for input data that has an unknown encoding type. Introduced in CAPICOM 2.0.
CAPICOM_ENCODE_BASE64
Data is saved as a base64-encoded string.
0
CAPICOM_ENCODE_BINARY
Data is saved as a pure binary sequence.
1
(0)ну и нахрен эти танцы с бубнами, когда это последний раз сдачи декларации ?
Её же отменили (ну, разве что вы не производство или пивом торгуете).
(24)Пробовал, выдает ошибку, что-то типа того, что недоступно в данном контексте. Завтра точнее посмотрю.
(25)Нет, не производство. Розница. А у розницы отменили только 11-тую форму(Маркируемый алкоголь), а 12(Пиво) осталась. И я думаю, на долго, пока что-то типа акцизных марок на пиво не сделают. А это не один год. А пивняки, самые "раздолбаистые" клиенты, они раньше вообще халявили, через раз сдавали, и все им с рук сходило, а теперь, когда отменили 11 форму, к ним у контролирующих органов будет особое внимание(работы то меньше стало :-) ). Поэтому и хочется сделать для них упрощенный вариант.
(26) я бы перенес все в VBS или JS-файл и поотлаживал бы непосредственно скрипт. Там было бы понятно на какой строке возникает ошибка и соответственно видно, от какой печки плясать. Мне кажется, бинарник должен записываться.
Думал об этом. Но, к сожалению, не знаю, как правильно это сделать. :-(: А автор разработки с ИнфоСтарта, почему-то игнорирует мои вопросы и там, и здесь, хотя на конфу ИнфоСтарта заходит, 15.01.18 был. Проблему я описал значительно раньше :-(
(31)Спасибо, у меня основная рабочая машина, где я всем "творчеством" занимаюсь, вообще под XP, естественно 32 бита. Есть доступная(рядом стоит, на один монитор с клавой выведена, с переключателем) под семеркой, 32 бита, и по удаленке есть семерка 64 бита. Буду пробовать. Не понятно пока вот это: "делаете точку входа и запускаете" - как сделать точку входа?
Да ссылку то я посмотрел. Но не все так просто, как там описано. Примеры из ссылки я пробовал, работают, более менее все понятно.
А вот в моей текущей задаче, не понятно где сертификат брать, что-бы его в скрипт запихнуть.
Сам скрипт понятен, ничего там сложного нет, а вот как с ним работать, темный лес.
Функция SignFile, три параметра, имя "входного" файла, имя "выходного", и сертификат. Если имена я могу просто, явно объявить, то как передать сертификат в скрипт, мне не понятно.
И как отлаживать, я пока тоже не понял. Ну, запускаю этот скрипт, и ничего не происходит, ошибок нет но и ничего не делает.
Попробовал вот так сделать:
Похоже, что можно внутри скрипта делать, в 1С не прокатывает. Пробовал без переменной, прямо так:
7.7, как я понял, не понимает бинарные данные и не может их поместить в переменную. Может нужно какой-то объект создать, для их хранения и передачи?
Ну, в общем, лед тронулся.
Вот такой код JS у меня заработал, ну, конечно не до конца, ругается на "Несоответствие типов строка 17 символ 2" :
Ну, это и понятно, я ему вместо сертификата пустые кавычки передаю. Надо сейчас поискать, попадались примеры, как в JS скрипте с помощью CAPICOM сертификат получить.
(37) я сюда скидывал, в эту ветку, посмотрите мой пример. У каждого сертификата есть SHA1 отпечаток, который можно глянуть в свойствах сертификата. Это относительно короткая строка, содержащая символы 0..9 и a..f. По этой строке можно средствами CAPICOM найти сертификат в хранилище и потом передать для подписания им контента. Смотрите (11) и потом (7).
(36) не готов сказать. Все касающееся подписания и отправки у меня крутится на VBS и 1С туда не лезет. Ее дело подготовить исходный файл.
Использовал Ваш пример на vbs из(7) Пока кодировку не менял. Вот так:
Валится в исключение, без объяснения причин.
Имя файла входное/выходное передаю, сертификат тоже.
Не пойму, чего ему не хватает :(
В общем, с запуском скрипта vbs разобрался. Надо так:
Так работает, но на выходе абракадабра строками по 64 символа. Это из-за кодировки "Base64" - ?
(41) Да, так и есть. Крипто-про записывает Base64 по 64 символа, потом перевод строки. Выглядит примерно так:
MIINCwYJKoZIhvcNAQcCoIIM/DCCDPgCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG
9w0BBwGgggjxMIII7TCCCJygAwIBAgIQAdLOOGcddYAAAA/QA3kAAjAIBgYqhQMC
.
Не знаю, как здесь файлы прикреплять.
В общем, по ссылке: https://cloud.mail.ru/public/BqmL/LgZrBtVu1
архив, в нем три файла - специально сделанный "коротенький" xml, он-же подписанный КриптоАРМом, и он-же подписанный через 1С скриптом на vbs.
Там все видно.
Кстати, подписанный скриптом файл КриптоАРМом открывается, подпись снимается. Но, кодировка явно не та, что нужно.
Ну. Такое я уже получал, и что?
Это-же не то.
Откройте тот файл, который я в предыдущей месаге выкладывал. Там есть файл, подписанный КриптоАРМ. Если его открыть блокнотом, то видно, что идет небольшой кусочек двоичных данных, потом сама XML-ка, и в конце, опять двоичные данные. При этом, эти двоичные вставки выглядят как текст "кракозябликами". В Вашем файле ничего такого нет, почти все "квадратиками". И он не открывается КриптоАРМом, ошибку дает. Файлы подписанные самим КриптоАРМом, и моим скриптом на VBS, открываются КриптоАРМом нормально, подпись снимается, файлы восстанавливаются в исходный вид, бит в бит.
и тут видится некоторый тупик, потому что крипто-про свою подпись проверяет и говорит что все нормально.
Ну, на самом деле, все эти программы, просто смотрят на начало файла, и пытаются подсунуть кодировку, которую там вычитали. И фиг бы с ними(они и не обязаны это делать), но, у меня Ваш(и мой, из аналогичных экспериментов) файл не открывается КриптоАРМом(а вот он, просто ОБЯЗАН открывать любой КОРРЕКТНЫЙ файл с подписью, пофигу, в чем он подписан). И нет никакой гарантии, что он откроется у получателя(ФСРАР).
(56) совершенно верно. Notepad++ опознает одну из кодировок Unicode, тогда как чтобы увидеть нечто знакомое, вам надо кодировку Windows-1251. Но только суть-то не в этом. Еще раз повторяю - родная утилита, запущенная как cryptcp -verify src.xml.sig, подпись видит и говорит что все с ней хорошо. У вас какой криптопровайдер? Может, VipNet?
У меня, на основном компе, под ХРюшей - КриптоПро CSP 3.6, от банка Возрождение вместе с их Клиент-банком достался. На втором, рядом стоящем компе - VipNet CSP, по удаленке доступны еще несколько компов с разными версиями как КриптоПро, так и ВипНет. Пробовал на разных, все одно и то-же.
Тут еще нужно иметь в виду такую штуку, что CAPICOM довольно-таки старая вещь и она уже давно не развивается. Ей на замену пришел CaDESCOM и там уже несколько больше и кодировок, и многого другого. Возможно, то что вам нужно, удастся сделать на нем. Думаю, будет небесполезно зарегистрироваться на форуме крипто-про и позадавать вопросы еще и там.
Сложно все это. Того не стоит. Я думаю, надо попробовать консольную утилиту из(49) из под 1С заюзать. Думаю, проще и надежнее будет.
Только сейчас заметил, что она платная, 2250 руб. :-(
Нафиг. Уж лучше тогда КриптоАРМ плюс, на 50 рублей дешевле, и при этом, умеет с ДжаКартой работать.
(66) в этой ветке работают также, с той разницей что Options=2 и пытаются сразу писать бинарник вместо base64 (последний параметр Sign).
(67) Да. Так похоже. Но, только КриптоАРМ все равно ругается: https://content.foto.my.mail.ru/mail/m_w_w/_mypagephoto/i-224.jpg Соответственно, 99.9%, что у получателя тоже не откроется.
(66) Пробовал аналогично под 7.7 (35) Пишет "Неверный тип переменной". Похоже, семерка не может хранить в переменной двоичные данные.
(69) Неплохим вариантом было бы связаться с техподдержкой организации, куда вы посылаете данные, и попросить их проверить подготовленные данные. Второй вариант - просто тупо отослать декларацию обычным порядком. Если ее завернут из-за неподходящей подписи - это ведь вряд ли чревато санкциями?
Да, в семерке описанный в (66) вариант вряд ли прокатит, потому что средствами семерки вы не преобразуете из Base64 в двоичку.
(69) Удалось понять причину. Проблема в том, что ADOStream.WriteText записывает в начало бинарника два символа с кодом 255 и 254. Если вы их сотрете, то файл начнет проверяться криптоармом. Из-за них и просмотрщики пытаются открывать файл как юникодный.
При чтении из файла в кодировке UTF-8, содержащего символы определяющие денежные единицы, например символ Йены (код в таблице Unicode U+00A5) или анг.фунта (U+00A3), при условии что не установлена опция On Error Resume Next получаем ошибку
Ошибка выполнения Microsoft VBScript: Недопустимый вызов или аргумент процедуры
Точнее ошибка возникает не при чтении, а при дальнейшем использовании строки считанной из файла.
Я написал тестовый пример (см. ниже), который создает строки в формате UTF-8, содержащие символы C2A0 . C2BF (символы Unicode U+00A0. U+00BF) и потом их конвертирует в Win-1251 - в результате получается, что создаются не пустыми лишь некоторые файлы.
U+00A0 U+00A4 U+00A6 U+00A7 U+00A9 U+00AB U+00AC U+00AD U+00AE U+00B0 U+00B1 U+00B5 U+00B6 U+00B7 U+00BB.
Остальные создаются пустыми.
Парадокс: Если конвертировать UTF-8 в кодовую таблицу 866, то таких проблем не возникает. Некоторые символы просто не перекодируются и всё - т.е. файлы в 866-кодировке в тестовом примере получаются размером 2 либо 3 байта.
Кто-нибудь из гуру может прокомментировать такое странное поведение ADODB.Stream?
PS: при использовании аналогичной функции из копилки с перекодировкой файла таких проблем не возникает
2 Ответ от BeS Yara 2012-12-04 10:54:06
- BeS Yara
- Разработчик
- Неактивен
Проблема не в ADO.DB, проблема в FSO - ошибка возникает не при работе со строкой, а при попытке её записать в файл методом WriteLine(достаточно запустить скрипт в отладчике).
Соответственно файл уже создан(пустой), записать не удалось. А так как на ошибки забиваем - идём дальше и получаем толпу пустых файлов. Возможно какой-то баг FSO при попытке писать UTF-8 в открытый как ASCII файл.
Я написал тестовый пример (см. ниже), который создает строки в формате UTF-8, содержащие символы C2A0 . C2BF (символы Unicode U+00A0. U+00BF) и потом их конвертирует в Win-1251
Вообще-то, пример делает наоборот
Чтобы конвертировать из UTF в cp1251 нужно аргументы поменять местами
3 Ответ от yuriy2000 2012-12-05 05:05:27
касательно использования StrConv(sBuf,"UTF-8","windows-1251") - дискуссия была здесь:
4 Ответ от BeS Yara 2012-12-05 11:01:20
- BeS Yara
- Разработчик
- Неактивен
Правда в свете этого:
Charset Property (ADO):Sets or returns a String value that specifies the character set into which the contents of the Stream will be translated. The default value is Unicode.
а также приведённого в MSDN примера, всё выглядит не очень логично(для меня), но на тестовом примере(чтение строки из файла в UTF-8, StrConv, запись в ASCII файл) это подтвердилось(похоже я в корне неверно понимаю работу с ado.stream ).
Однако, в Вашем случае если ADO и виноват, то лишь косвенно - ошибка возникает всё-таки после того как ADO своё отработал.
5 Ответ от yuriy2000 2012-12-05 20:25:11
Действительно.
.
Однако, в Вашем случае если ADO и виноват, то лишь косвенно - ошибка возникает всё-таки после того как ADO своё отработал.
Возможно, что проблема и не ado.stream , но всё-таки что-то с ним не так, ведь если перекодировать в cp866, то проблем не возникает.
6 Ответ от BeS Yara 2012-12-06 13:04:53
- BeS Yara
- Разработчик
- Неактивен
Если посмотреть ASCII-код символов на выходе из потока, то можно обратить внимание на характерный факт: "ненулевые" файлы возникают для символов для которых vbscript выдаёт одинаковый код и через Asc и через AscW. Для части символов коды совпадают, для остальных Asc=63(вопросительный знак), и ошибка метода .WriteLine.
Такое впечатление, что проблемы нет только для символов имеющих "синоним" или дубль в US-ASCII. Навеяно вики(ASCII-Национальные варианты ASCII, первый абзац), но обосновать не могу - не по всем работающим символам в статье есть упоминание.
Полагаю, что пример(по работе напрямую с файлом) работает без проблем по той причине, что ADO.Stream читает и пишет файлы не посимвольно, а побайтово. А потому вся работа с кодировками выполняется в нём без лишних "прокладок".
В Вашем случае прибавляется vbscript со своими тараканами.
Всё ниже сказанное - великое колдунство, которое я сам до конца не понял(какая-то идея под коркой шевелиться, но сформулировать не получается).:)
Если заменить:
то ошибка не возникает, файлы пишутся все.
P.S. буду премного благодарен, если найдётся голова, которая мне популярно пояснит что же я сделал и почему запись 161-го(например) символа в рассматриваемом скрипте(изначальном) даёт ошибку, а этот код нет:
P.P.S. возможно таки ADO тут "при чём".
7 Ответ от YMP 2012-12-06 14:03:14
PS: при использовании аналогичной функции из копилки с перекодировкой файла таких проблем не возникает
Но эта функция вам не подходит? Тогда поясните, в чём конкретно ваша задача заключается, что вы пытаетесь сделать?
8 Ответ от yuriy2000 2012-12-06 18:09:48
PS: при использовании аналогичной функции из копилки с перекодировкой файла таких проблем не возникает
Но эта функция вам не подходит? Тогда поясните, в чём конкретно ваша задача заключается, что вы пытаетесь сделать?
Да, эта функция из копилки (с конвертацией всего файла за один проход) решила мои проблемы, в конкретном случае. но дело в том, что хотелось бы конвертировать строки в памяти. В будущем.
Может быть совместными усилиями найдем решение проблемы с этой StrConv.
9 Ответ от YMP 2012-12-06 20:39:33
Я написал тестовый пример (см. ниже), который создает строки в формате UTF-8
Тогда вам нужно использовать функцию ChrB. У вас в примере создаётся строка из двух юникодных двухбайтных символов (UTF-16), а не один двухбайтный символ UTF-8.
Если читать файл UTF-8 через FSO как ANSI, то во время чтения происходит конвертация в UTF-16, поскольку таков формат строк в VBScript. Конвертация пойдёт по таблице 1251 и в переменной окажется нечитаемый набор символов.
Восстановить строку можно записью из переменной в Stream, кодировка которого 1251. При этом произойдёт конвертация уже из Юникода по той же 1251 таблице, т.е. процесс, обратный тому, который привёл к порче строки. После этого меняем кодировку Stream на UTF-8, чтобы она соответствовала содержимому и читаем снова в переменную, при этом происходит конвертация в Юникод, но уже по правильной таблице UTF-8. В итоге имеем в переменной читаемый текст в UTF-16.
При попытке сохранить его через FSO в файл в кодировке 1251 проблема возникает, судя по всему, из-за символов, отсутствующих в целевой кодовой странице, т.е. тех, которые были бы заменены на знак вопроса. Может, забота о том, чтобы у пользователя информация не терялась.
10 Ответ от YMP 2012-12-06 21:58:18
Если всё же нужно записать такой текст через FSO в файл в 1251, пусть даже с заменой отсутствующих в ней символов на "?", то можно предварительно сделать так:
Получим ту же строку UTF-16, но где неродные для 1251 символы уже заменены на знаки вопроса, так что FSO не будет протестовать.
Write your own adovbs.inc file, with only the handful of constants you need;
Only define constants as you need them;
Place the relevant constant/value pairs in a comment, and use the integer equivalent in the actual code; or
Use < !--METADATA. -- >references in global.asa:
< !--METADATA
TYPE='TypeLib'
NAME='Microsoft ActiveX Data Objects 2.7 Library'
UUID=''
VERSION='2.7'-- >
Версия ADO у меня 2.7 , в global.asa прописал что надо, файл заинклудил.
Правда в файле adovbs.inc нет константы adSaveCreateNotExists.
Прочитать файл F, отсортировать с помощью быстрой сортировки, и записать результат в файл G
дана вот такая задача: создать файл ф в котором были-бы записаны 30 000 чисел в случайном.
Файл: Как с помощью Python записать (а не перезаписать) данные из базы SQLite в файл lex.txt.
Помогите с разработкой части проекта, пожалуйста! Есть файл db.sqlite в котором таджикские слова.
Файл H заполнить целыми числами, полученными помощью генератора случайных чисел. В файл M записать значение файла H, кратное 5
1) Файл H заполнить целыми числами, полученными помощью генератора случайных чисел. В файл M.
Как с помощью VB записать текстовый файл.
Нужно очень срочно Заранее благодарен
Dim objStream
Set objStream = CreateObject('ADODB.Stream')
objStream.Type = 2
objStream.Open
objStream.WriteText 'Buy a copy of Designing Active Server Pages. '
Как записать структуру в файл с помощью fstream?
доброго времени суток, нужна ваша помощ. припустим у нас есть структура: struct group < char.
Результат сортировки записать в файл с помощью records
нужно результат проги(сортировка) записать в файл с помощью records.
Необходимо записать массив чисел из текстового файла в нетипизированный файл
Дан текстовый файл, который содержит массив целых чисел. Необходимо записать массив чисел из.
Помогите с помощью php записать аудио файл в mysql.
Пишу сайт, на котором зарегестрированный пользовать будет иметь возможность добавлять свою музыку.
Я как-то задавал вопрос, но никто не ответил (может глупый вопрос?).
но нимогу скачать файл таким методом. Максимум качается 4 МБ, а потом ошибка буфера. С небольшими файлами проблем нет.
Отсюда вопрос как увеличить этот буфер? может где в IIS ?
XML->ADODB.Stream->ADODB.Recordset
Пытаюсь настроить XML->ADODB.Stream->ADODB.Recordset Подаю ПРАВИЛЬНЫЙ XML на вход ниже.
ADODB.Stream пoддерживaет IStream, a Scripting.TextStream - нет.
Пoчему пoтoки ADODB.Stream и Scripting.Stream не являютсa реaлизaциями IStream. (или я не прaв?).
Объясните про потоки (stream)
Здравствуйте. Помогите разобраться с потоками(не Thread, а Stream). У меня знания очень.
вот привожу код.
если файл сейчас почемуто самой ошибки не сгенерировалось (видимо on error) стоит, но всеравно сохраняет файл с нулем байт
Помню, что в ошибке были слова max buffer limit.
неа. всеравно ошибка. теперь ничего не скачивается.
привожу ошибку прежнего кода и с новым (сорри за кодировку).
Ничего себе. В первый раз вижу подобную ошибку, чтобы Response Buffer переполнился.
Попробуй его отключить, поставив в начале файла строку
Response.Buffer = False
Не, ошибся. таже ошибка c большими файлами и с EOS.
а буфер ставил и true и false. только с фальшей выдает что у тебя буфер off переключись на on.
кстати заодно, подскажите по такому случаю: перестала генеритья подробная ошибка. только показывает неопознанную 500. чего где подкрутить?
Можно еще попробовать после Response.Write поставить вызов Response.Flush
кстати заодно, подскажите по такому случаю: перестала генеритья подробная ошибка. только показывает неопознанную 500. чего где подкрутить?
Спасибо большое.
Response.Flush помог! теперь скачивается файл любого размера.
А вот подробные ошибки так и не показываются. только неопознанная 500
Смотри прикрепленный файл
Если она вылючена, то поставь в настройках IIS для своего сайта обработчик ошибки 500;100. Для этого скопируй к себе файл WINDOWSHelpiisHelpcommon500-100.asp (например в корень) и поставь обработчик ошибки как URL /500-100.asp
Читайте также: