21.03.2009, 18:04 | #1 |
Участник
|
Сохранение файла на веб сервере
Добрый день,
Есть следующая задача: Автоматически сохранять отчет в определенное время на веб сервере (Apache + php) в виде текстового файла. Из Axapta 3.0. Веб сервер никоим образом с аксаптой не связан. Сохранять на локальный диск получается, к веб серверу не знаю как подступиться. Kак установить соединение с веб сервером, как сохранить на нем файл. Kакие классы аксапты использовать. Буду благодарен любой информации! |
|
22.03.2009, 03:48 | #2 |
Участник
|
Что значит "сохранить файл на веб-сервер" ?
Если есть Apache + PHP + БД, то файл можно сохранить в БД. |
|
22.03.2009, 11:20 | #3 |
Участник
|
Есть класс WinInet. Он умеет читать файц по URL, попробуйте его расширить как описано:
http://www.axaptapedia.com/WinInet_class Можно считать пост недействительным. Пример как раз читает из инета, а не пишет туда. Последний раз редактировалось Raven Melancholic; 22.03.2009 в 11:26. Причина: Ошибся, исправился |
|
|
За это сообщение автора поблагодарили: rDenis (1). |
22.03.2009, 11:39 | #4 |
Участник
|
Кстати, я не спец в WEB сайтах. но разве по протоколу HTTP можно каким-то образом загрузить файл на сервер помимо использования тега <input type = "file">?
Обычно используют копирование через файловую систему (если сервер доступен), либо используют FTP протокол. |
|
22.03.2009, 13:41 | #5 |
Administrator
|
На вебсервер можно положить скрипт, который будет принимать файлы, загруженные по http методом post (как это делает броузер для <input type="file">), и сохранять его куда надо (хинт). Насчет аксапты не знаю, а с php все просто.
__________________
Был грязный плащ на нем одет, Цилиндр черный смят в гармошку... |
|
|
За это сообщение автора поблагодарили: rDenis (1). |
22.03.2009, 13:46 | #6 |
Участник
|
Спасибо за информацию, единственный cпособ который я нашел действительно по фтп с помощью класса WinInet.
http://erpkb.com/Axapta/KakPoslat'FajjlPoFtp Приходится делать в два захода, вначале локально сохранять файл, потом читать его и послылать на фтп сервер. |
|
|
За это сообщение автора поблагодарили: zemius (1). |
23.03.2009, 09:48 | #7 |
Участник
|
Цитата:
Сообщение от rDenis
Спасибо за информацию, единственный cпособ который я нашел действительно по фтп с помощью класса WinInet.
http://erpkb.com/Axapta/KakPoslat'FajjlPoFtp Приходится делать в два захода, вначале локально сохранять файл, потом читать его и послылать на фтп сервер. А вот если файл бинарный, то только FTP, http post в принципе все равно какие данные передавать, а вот в Аксапте будут проблемы, так как не получается получить указатель на бинарные данные чтобы передать его в фукнцию. Тип str для этого не подойдет, так как обрежет данные по первому нулевому символу. |
|
25.03.2009, 00:43 | #8 |
Участник
|
Цитата:
Сообщение от Lucky13
Если файл текстовый, то, на мой взгляд, лучше использовать http post как говорит Aleksey_M. Проблем особых нет - в аксапте используется тот же WinInet, а на PHP пишется скрипт из нескольких строк. FTP в данном случае создаст дополнительные трудности при администрировании - придется права настраивать, порты открывать и т.п.
А вот если файл бинарный, то только FTP, http post в принципе все равно какие данные передавать, а вот в Аксапте будут проблемы, так как не получается получить указатель на бинарные данные чтобы передать его в фукнцию. Тип str для этого не подойдет, так как обрежет данные по первому нулевому символу. Добавил в WinInet new() X++: _httpOpenRequest = new DLLFunction(_winInet, 'HttpOpenRequestA'); _httpOpenRequest.returns(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::STRING); _httpOpenRequest.arg(ExtTypes::STRING); _httpOpenRequest.arg(ExtTypes::STRING); _httpOpenRequest.arg(ExtTypes::STRING); _httpOpenRequest.arg(ExtTypes::STRING); _httpOpenRequest.arg(ExtTypes::DWORD); _httpOpenRequest.arg(ExtTypes::DWORD); _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA'); _httpSendRequest.returns(ExtTypes::DWORD); _httpSendRequest.arg(ExtTypes::DWORD); _httpSendRequest.arg(ExtTypes::STRING); _httpSendRequest.arg(ExtTypes::DWORD); _httpSendRequest.arg(ExtTypes::POINTER); _httpSendRequest.arg(ExtTypes::DWORD); X++: int httpOpenRequest(int _handler, str _request, str _targetObjectName) { return _httpOpenRequest.call(_handler, _request, _targetObjectName, 0, 0, 0, 1,0); } boolean httpSendRequest(int _handler, BinData _file, int _size) { return _httpSendRequest.call(_handler, "Content-Type: application/x-www-form-urlencoded", 47, _file, _size); } X++: BinData binData = new BinData(); binData.loadFile("c:\\test5.txt"); code1 = winInet.internetConnect("192.168.0.10", "", "", 3); code2 = winInet.httpOpenRequest(code1, "POST", "receive.php"); iwinInet.httpSendRequest(code2, binData, binData.getVariant().safeArray().lastIndex())) |
|
25.03.2009, 09:51 | #9 |
Участник
|
У меня вот такой HttpSendRequest
X++: _httpSendRequest = new DLLFunction(_winInet, 'HttpSendRequestA'); _httpSendRequest.returns(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::String); _httpSendRequest.arg(ExtTypes::DWord); _httpSendRequest.arg(ExtTypes::String); _httpSendRequest.arg(ExtTypes::DWord); Как делаете Вы у меня тоже не получилось. Если бы так было можно, тогда и бинарные файлы можно было бы передавать |
|