Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2008, 21:08   #1
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию Передать файл клиенту

Здравствуйте, в процессе написания скрипта столкнулся с проблемой.
Стоит задача передать файл с сервера клиенту, используя клиентские скрипты. Пробывал задействовать ajax, но почемуто на запрос на файл(отличный от текстового) не чего не приходит, но, если пробывать запрашивать файлы, например, *.html, *.txt и так далее, все нормально работает.
Подскажите может кто сталкивался?
Спасибо.
BlackOmen вне форума Ответить с цитированием
Старый 25.06.2008, 01:41   #2
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Код надо видеть. Возможно, метод отдачи неправильный, возможно запрашиваемый тип неправильно установлен.
ЗЫ. Кстати передать С СЕРВЕРА КЛИЕНТСКИМ скриптом нереально и нелогично. Чтобы клиент забрал, надо же кому-то давать. Кому, как не серверу?
SkyM@n вне форума Ответить с цитированием
Старый 25.06.2008, 11:18   #3
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
Код надо видеть. Возможно, метод отдачи неправильный, возможно запрашиваемый тип неправильно установлен.
ЗЫ. Кстати передать С СЕРВЕРА КЛИЕНТСКИМ скриптом нереально и нелогично. Чтобы клиент забрал, надо же кому-то давать. Кому, как не серверу?
Как я упоминал ранее следующий код не работает с бинарными файлами(*.doc, *.pdf)
Код:
var req;
var File;
var wF;

function processReqChange(){ 
 if(req.readyState == 4 && req.status == 200){ 
  rez = req.responseText;
  wF.write(rez);
  wF.close();   
  return (1);     
 } else if (rez = "") { 
 return (0);
  }
} 
 
function DoWork(url){
var rez;
try { 
File = new  ActiveXObject("Scripting.FileSystemObject");
} catch(IOErr){
 document.write("error_creating_file" + "<br/>")
}
if (File){
   wF = File.createTextFile("C://файл.xxx");
   if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.overrideMimeType('text/html');  
        req.onreadystatechange = processReqChange;  
        req.open('GET', url, true);  
        req.send(null);        
    } else
    if (window.ActiveXObject) {        
        req = new ActiveXObject('Microsoft.XMLHTTP');    
        if (req) {                    
            req.onreadystatechange = processReqChange; 
            req.open('GET',url, true);  
            req.send();          
           return(rez);                     
        }  
    }   
  }
}
В скрипте используется технология AJAX, как известно централь для неё это объект XMLHttpRequest, но запрос на бинарные файлы игнорируется им.

>>Кстати передать С СЕРВЕРА КЛИЕНТСКИМ скриптом нереально
Почему не реально? Текстовые, пожалуйста, хоть сколько!
BlackOmen вне форума Ответить с цитированием
Старый 25.06.2008, 15:07   #4
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от BlackOmen Посмотреть сообщение
Почему не реально? Текстовые, пожалуйста, хоть сколько!
Потому что это нелогично. Ты не можешь взять тебе то, чего тебе не дают.

wF = File.createTextFile("C://файл.xxx");
Вот из-за этого весь баг. Из соображений безопаснопасности - ты не можешь получить доступ к файловой системе юзера.
И это не целесообразно зачем его туда сохранять?
SkyM@n вне форума Ответить с цитированием
Старый 25.06.2008, 15:28   #5
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

Цитата:
Сообщение от BlackOmen Посмотреть сообщение
но запрос на бинарные файлы игнорируется им.
С этого момента поподробнее. Как дебаггил?
SkyM@n вне форума Ответить с цитированием
Старый 25.06.2008, 21:18   #6
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Цитата:
Сообщение от SkyM@n Посмотреть сообщение
Потому что это нелогично. Ты не можешь взять тебе то, чего тебе не дают.

wF = File.createTextFile("C://файл.xxx");
Вот из-за этого весь баг. Из соображений безопаснопасности - ты не можешь получить доступ к файловой системе юзера.
И это не целесообразно зачем его туда сохранять?
Д это не важно "wF = File.createTextFile("C://файл.xxx");" ,
Почему я решил, что запрос на бинарные файлы игнорируется?

В процессе написания столь простого скрипта, естественно, ни в какие файлы я сначала не чего не писал, а использовал просто использовал метод "document.write(rez)". Так вот (проверял на локальном сервере), туда положил файл, скажем, "XXXX.xxx", посылаю запрос на получение вышеизложенным методом. Так как файл не текстовый, не чего не приходит и "document.write(rez)" об этом мне сигнализирует.
Стоит только тупо открыть этот файл в блокноте и сохранить его (в этом же блокноте не чего не меняя), всё приходит до последнего символа.

Это наводит на мысль, XMLHttpRequest, не умеет читать бинарные файлы.
Какие мысли?

Последний раз редактировалось BlackOmen; 25.06.2008 в 21:30.
BlackOmen вне форума Ответить с цитированием
Старый 25.06.2008, 22:19   #7
SkyM@n
Laravel/Vue expert
Старожил Подтвердите свой е-майл
 
Аватар для SkyM@n
 
Регистрация: 08.08.2007
Сообщений: 2,832
По умолчанию

MIME-type менял? у тебя там стоит text/HTML
SkyM@n вне форума Ответить с цитированием
Старый 26.06.2008, 11:36   #8
BlackOmen
Пользователь
 
Аватар для BlackOmen
 
Регистрация: 27.02.2008
Сообщений: 54
По умолчанию

Менял, не помогает
BlackOmen вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как передать данные из SQL в файл _ozzy_ БД в Delphi 0 12.06.2008 16:50
Ответ клиенту... prizrak1390 Работа с сетью в Delphi 8 22.05.2008 11:34
Передать Канву Pedro Работа с сетью в Delphi 7 28.04.2008 17:38
Передача команд серверу и клиенту OrdJONY Работа с сетью в Delphi 9 28.08.2007 10:51
Формирование из excel в ASCII, у меня он формирует по одному клиенту а в Excel нескол Askat Общие вопросы Delphi 0 18.07.2007 06:28