Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.03.2012, 12:55
Новичок на форуме
Отправить личное сообщение для oleg40 Посмотреть профиль Найти все сообщения от oleg40
 
Регистрация: 24.03.2012
Сообщений: 3

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);
}
Ответить с цитированием
  #2 (permalink)  
Старый 24.03.2012, 13:39
Аватар для GuardCat
Просто любитель
Отправить личное сообщение для GuardCat Посмотреть профиль Найти все сообщения от GuardCat
 
Регистрация: 13.09.2011
Сообщений: 300

Посмотрите тут. Вроде то что вам нужно.
Ответить с цитированием
  #3 (permalink)  
Старый 24.03.2012, 15:47
Новичок на форуме
Отправить личное сообщение для oleg40 Посмотреть профиль Найти все сообщения от oleg40
 
Регистрация: 24.03.2012
Сообщений: 3

Я пробывал уже этот код.
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.
Ответить с цитированием
  #4 (permalink)  
Старый 26.04.2012, 14:55
Аватар для lord2kim
Профессор
Отправить личное сообщение для lord2kim Посмотреть профиль Найти все сообщения от lord2kim
 
Регистрация: 03.05.2011
Сообщений: 848

этот объект вроде еще нужно активировать

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;
	}
}
Ответить с цитированием
  #5 (permalink)  
Старый 26.04.2012, 18:53
Новичок на форуме
Отправить личное сообщение для oleg40 Посмотреть профиль Найти все сообщения от oleg40
 
Регистрация: 24.03.2012
Сообщений: 3

Спасибо
Ответить с цитированием
  #6 (permalink)  
Старый 20.07.2013, 02:17
Аватар для Tim
Tim Tim вне форума
Профессор
Отправить личное сообщение для Tim Посмотреть профиль Найти все сообщения от Tim
 
Регистрация: 05.06.2009
Сообщений: 1,703

Ещё можно читать фай по частям если он большой
http://www.html5rocks.com/ru/tutorials/file/dndfiles/

Обрабатывать кусочки ф-й base64_encode
http://javascript.ru/php/base64_encode

и передавать по сети
__________________
Лучше установить FreeBSD, чем потратить 30 лет на Linux'ы и выяснить какой из них хуже.
Самые главные в жизни вещи - не вещи! (было написано на одном гараже =)
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37