FTP 文件上传

Ftp File Upload

本文关键字:文件 FTP      更新时间:2023-10-16
BOOL uploadFile(char *filename, char *destination_name, char *address, char *username, char *password)
{
BOOL t = false;
HINTERNET hint, hftp;
hint = InternetOpen("FTP", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, INTERNET_FLAG_ASYNC);
hftp = InternetConnect(hint, address, INTERNET_DEFAULT_FTP_PORT, username, password, INTERNET_SERVICE_FTP, 0 , 0);
t = FtpPutFile(hftp, filename, destination_name, FTP_TRANSFER_TYPE_BINARY, 0);
InternetCloseHandle(hftp);
InternetCloseHandle(hint);
return t;
}

这是我将文件上传到服务器的功能,写得好吗? 我正在使用函数

uploadFile(workFullPath,extractFilename(workFullPath),"address","login","password");

但是我的文件没有出现在ftp上。

您根本没有进行任何错误处理,因此您无法知道为什么文件没有上传。

每当 WinInet 函数失败时,都可以根据每个函数的 WinInet 文档调用GetLastError()以找出失败的原因。

如果GetLastError()返回ERROR_INTERNET_EXTENDED_ERROR,请使用InternetGetLastResponseInfo()获取服务器的错误:

ERROR_INTERNET_EXTENDED_ERROR
12003
从服务器返回扩展错误。这通常是包含详细错误消息的字符串或缓冲区。调用InternetGetLastResponseInfo以检索错误文本。

有关使用InternetGetLastResponseInfo()的示例,请参阅 WinNet 的处理错误文档。

其他需要注意的事情 - 您正在使用INTERNET_FLAG_ASYNC标志调用InternetOpen()

仅对从此函数返回的句柄派生的句柄发出异步请求。

但是,您实际上并没有异步使用 WinInet,因此您根本不应该使用该标志。

请参阅 WinInet的 FTP 会话文档,了解有关如何使用 WinInet FTP 功能的更多详细信息。

尝试更多类似的东西:

BOOL uploadFile(char *filename, char *destination_name, char *address, char *username, char *password)
{
BOOL res = FALSE;
DWORD err;
HINTERNET hint = InternetOpen("FTP", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
if (hint == NULL)
{
err = GetLastError();
// handle the error as needed...
goto done;
}
HINTERNET hftp = InternetConnect(hint, address, INTERNET_DEFAULT_FTP_PORT, username, password, INTERNET_SERVICE_FTP, 0 , 0);
if (hftp == NULL)
{
err = GetLastError();
// handle the error as needed...
goto cleanup;
}
res = FtpPutFile(hftp, filename, destination_name, FTP_TRANSFER_TYPE_BINARY, 0);
if (!res)
{
err = GetLastError();
// handle the error as needed...
}
cleanup:
if (hftp) InternetCloseHandle(hftp);
if (hint) InternetCloseHandle(hint);
done:
return res;
}