Имя: Пароль:
1C
Веб-мастеринг
возврат файла в браузере через http-соединение
0 olo_lo1
 
13.03.17
09:29
Подскажите пожалуйста, следующий момент

через GET запрос в браузере подкл к базе 1С, там по передаваемым параметрам формируется отчет в Эксель, после чего этот файл передаю через возврат. Но как я понимаю он передается через двоичные данные

Как сделать так что бы в браузере этот файл можно было прямо непосредственно скачать, заранее спасибо за ответ.
1 Андрюха
 
13.03.17
09:39
То есть надо чтобы после запроса к 1С в браузере появилось окно с файлом Excel и вариантами действий Открыть/Скачать?
2 olo_lo1
 
13.03.17
09:51
(1) да, все верно
3 Андрюха
 
13.03.17
09:55
4 olo_lo1
 
13.03.17
10:17
(3) туговат я в этом. Т.е. мне нужно из 1С этот ответ отправить ? А что делать с самим файлом, ничего не понял

<?php
$file = $_GET['file'].".jpg";
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
exit;
?>
5 olo_lo1
 
13.03.17
11:10
хеееелп
6 Fragster
 
гуру
13.03.17
11:11
(5) 8 заголовков и двоичные данные файла
7 Андрюха
 
13.03.17
11:15
Как файл из 1С обратно в браузер передаешь?
8 omgwtf
 
13.03.17
11:16
(6) скорее всего достаточно Content-Disposition, остальное 1с сама сгенерит
9 olo_lo1
 
13.03.17
11:28
(5) блин я реально не понимаю, можете с примером написать.

Я должен в переменную ответ запихнуть этот кусок - это не проблема, а далее просто двоичные данные что ли ?
10 Fragster
 
гуру
13.03.17
11:30
HTTPСервисОтвет.УстановитьТелоИзДвоичныхДанных (HTTPServiceResponse.SetBodyFromBinaryData)
HTTPСервисОтвет (HTTPServiceResponse)
УстановитьТелоИзДвоичныхДанных (SetBodyFromBinaryData)
Синтаксис:

УстановитьТелоИзДвоичныхДанных(<Данные>)
Параметры:

<Данные> (обязательный)

Тип: ДвоичныеДанные.
Двоичные данные, которые будут записаны в тело HTTP-ответа.
Описание:

Устанавливает тело HTTP-ответа из двоичных данных.

Доступность:

Сервер, толстый клиент.
См. также:

HTTPСервисОтвет, метод УстановитьТелоИзСтроки

--------------------------------------------------------------------------------

     Методическая информация
11 olo_lo1
 
13.03.17
11:52
(10) Примерно так ?

Ответ.УстановитьТелоИзСтроки(ТекстPHP);
Ответ.УстановитьТелоИзДвоичныхДанных(Новый ДвоичныеДанные(ИмяФайла));
12 olo_lo1
 
13.03.17
11:53
где
ТекстРНР =
"<?php
$file = $_GET['file'].".jpg";
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename=' . basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    readfile($file);
exit;
?>";
13 Fragster
 
гуру
13.03.17
12:12
(12) нет
14 Fragster
 
гуру
13.03.17
12:12
текст пхп - это пример отдачи файла на языке пхп
15 olo_lo1
 
13.03.17
14:20
(14) тогда ты не понял что я хочу. Я именно хочу через браузер получить файл.
16 olo_lo1
 
13.03.17
14:26
(15) + в браузере в строке адреса вбиваю нужную строку, 1С отрабатывает этот http-Запрос и возвращает файл, а я хочу именно в браузере его качнуть.
17 polosov
 
13.03.17
14:32
(16) ИмяВыходногоФайла = ПолучитьимяВременногоФайла("zip");
    ПутьВременныхФайлов  =    КаталогВременныхФайлов();
    
    ПутьДляРаспаковки = ПутьВременныхФайлов + "UnzipOrderData";
    
    Соединение = Новый HTTPСоединение("ДоменТвоегоСайта/Exchange");
    Попытка
        Соединение.Получить("GetOrders?id=3453453453_ид_какой_то_там", имяВыходногоФайла);
    Исключение
        
        ЗаписьЖурналаРегистрации(
                "Обмен заказами с сайтом",
                УровеньЖурналаРегистрации.Ошибка,
                ,
                ,
                НСтр("ru = 'Возникла ошибка HTTP-соединения'"));
        Возврат;
    КонецПопытки;
    

    УдалитьФайлы(ПутьДляРаспаковки,"*.*");
    
    ЗипФайл = Новый ЧтениеZipФайла(ИмяВыходногоФайла);
    ЗипФайл.ИзвлечьВсе(ПутьДляРаспаковки);
18 Stepa86
 
13.03.17
14:39
Ответ = Новый HTTPСервисОтвет(200);
        Ответ.УстановитьТелоИзДвоичныхДанных( двДанные );
        
        // заставляем браузер показать окно сохранения файла
        Ответ.Заголовки.Вставить("Content-Type", "application/xlsx");
        Ответ.Заголовки.Вставить("Content-Disposition", "attachment; filename=" + КодироватьСтроку( "Price.xlsx", СпособКодированияСтроки.КодировкаURL));
19 polosov
 
13.03.17
14:40
ДоменТвоегоСайта/Exchange/GetOrders?id=3453453453_ид_какой_то_там

А это вбиваешь в браузер, если хочешь руками файло получить
20 polosov
 
13.03.17
14:40
+(19) Ну им по аналогии с этим делаешь свое. Могут быть нюансы, надо у сайтовиков узнавать
21 olo_lo1
 
13.03.17
15:03
(18) спасибо, большое!!! все получилось.