Показать сообщение отдельно
Старый 25.03.2009, 00:43   #7  
rDenis is offline
rDenis
Участник
 
6 / 11 (1) +
Регистрация: 21.03.2009
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Если файл текстовый, то, на мой взгляд, лучше использовать http post как говорит Aleksey_M. Проблем особых нет - в аксапте используется тот же WinInet, а на PHP пишется скрипт из нескольких строк. FTP в данном случае создаст дополнительные трудности при администрировании - придется права настраивать, порты открывать и т.п.

А вот если файл бинарный, то только FTP, http post в принципе все равно какие данные передавать, а вот в Аксапте будут проблемы, так как не получается получить указатель на бинарные данные чтобы передать его в фукнцию. Тип str для этого не подойдет, так как обрежет данные по первому нулевому символу.
Пытаюсь передать файл по http, к сожалению не выходит.
Добавил в 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()))
Возможно задаю неправильные параметры для функций,или неправильно указал константы. К сожалению не нашел реализацию этих функций для аксапты.