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, время: 13:52. |