ActiveX FileSystemObject - проблемы с чтением бинарного файла и отправкой
Уже голову сломал.
Используется ActiveX FileSystemObject в IE. Нужно прочитать файл на клиенте и передать его содержимое. Всё круто когда обычные файлы. Когда же бинарные файлы то он ерунду мне отправляет (не понимает чтоли некоторые символы и вместо них нули), причем длина пост-запроса каждый раз разная. Скажите, реально ли вообще такое проворачивать - если да то как - если нет то почему??? Умеет ли вообще javascript работать с бинарными данными??? Пользуюсь таким кодом: function readFile(input) { var fs = new ActiveXObject("Scripting.FileSystemObject"); var file = fs.GetFile(input.value); var stream = file.OpenAsTextStream(1, 0); var content = stream.ReadAll(); stream.Close(); return content; } function send(url, inputName, filename, content, callBack) { var boundary = "xxxxxxxxx"; var body = "--" + boundary + "\r\n"; body += "Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + filename + "\"\r\n"; body += "Content-Type: application/octet-stream\r\n\r\n"; body += content + "\r\n"; body += "--" + boundary + "--"; var req = new XMLHttpRequest(); req.open("POST", url, true); req.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary); req.onreadystatechange = function () { if (req.readyState == 4) if (req.status == 200) if (callBack) callBack(); }; req.send(body); } |
Посмотрите тут. Вроде то что вам нужно.
|
Я пробывал уже этот код.
function GetBinaryFile(PathToFile) { var stream = new ActiveXObject("ADODB.Stream"); stream.type = 1; // Binary mode stream.Open(); stream.LoadFromFile(PathToFile); var GetFile = stream.Read(); stream.Close(); return GetFile; } Но stream.Read() почему то мне ничего не возвращает - мож из-за того что ось win7. |
этот объект вроде еще нужно активировать
function activate() { var sh = new ActiveXObject('WScript.Shell'); var CurrentLevel = sh.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3\\CurrentLevel"); var Flags = sh.RegRead("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\{00000566-0000-0010-8000-00AA006D2EA4}\\Compatibility Flags"); try { sh.RegWrite("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Zones\\3\\CurrentLevel", "73728", "REG_DWORD"); sh.RegWrite("HKLM\\SOFTWARE\\Microsoft\\Internet Explorer\\ActiveX Compatibility\\{00000566-0000-0010-8000-00AA006D2EA4}\\Compatibility Flags", "0", "REG_DWORD"); } catch (e) { alert("Ошибка "+e.number+": "+e.description+"\nВозможно у вас нет прав для редактирования реестра или данной директории не существует!"); } } в качестве manual-a function GetBinaryFile (PathToFile) { try { var stream = new ActiveXObject("ADODB.Stream"); stream.Open(); stream.Type = 1; // Binary file is encoded stream.LoadFromFile(PathToFile); var XML = new ActiveXObject("Microsoft.XMLDOM"); var DocElem = XML.createElement("Base64Data"); DocElem.dataType = "bin.base64"; DocElem.nodeTypedValue = Stream.Read(); return DocElem.text; } catch (e) { return "Ошибка: "+e.number+" -> "+e.description; } } |
Спасибо
|
Ещё можно читать фай по частям если он большой
http://www.html5rocks.com/ru/tutorials/file/dndfiles/ Обрабатывать кусочки ф-й base64_encode http://javascript.ru/php/base64_encode и передавать по сети |
Часовой пояс GMT +3, время: 08:07. |