Solved

FTPPutFile Example

Posted on 2009-07-16
10
5,602 Views
Last Modified: 2013-11-23
Hi,
     I recently found some code on the internet to upload a file to my web site but I can't seem to get the parameters correct.

I tried upload_file('123.123.123.123', '/Httpdocs/', 'C:\Test\1TestFile.txt', '/Httpdocs/1TestFile.txt', 'myusername', 'mypassword');

and several variations but nothing seems to work.

Any help appreciated.
function upload_file(remote_server, 

                     directory, 

                     local_file, 

                     remote_file, 

                     user, 

                     pass: PAnsiChar): boolean; 

var hInet, hConnect: HINTERNET; 

    Dir, Put: Boolean; 

begin 

hInet := InternetOpen(nil, INTERNET_OPEN_TYPE_DIRECT, nil, nil, 0); 

hConnect := InternetConnect(hInet, 

                            remote_server, 

                            INTERNET_DEFAULT_FTP_PORT, 

                            user, pass, 

                            INTERNET_SERVICE_FTP, 

                            INTERNET_FLAG_PASSIVE, 

                            0); 

Dir := ftpSetCurrentDirectory(hConnect, directory); 

WaitForSingleObject(Cardinal(Dir), infinite); 

Put := ftpPutFile(hConnect, local_file, remote_file, FTP_TRANSFER_TYPE_BINARY, 0); 

InternetCloseHandle(hInet); 

InternetCloseHandle(hConnect); 

Result:= Put; 

end;

Open in new window

0
Comment
Question by:pr_wainwright
  • 5
  • 5
10 Comments
 
LVL 14

Accepted Solution

by:
flob9 earned 250 total points
Comment Utility
Did you try

upload_file('123.123.123.123', '/Httpdocs/', 'C:\Test\1TestFile.txt', '1TestFile.txt', 'myusername', 'mypassword');

or :

upload_file('123.123.123.123', 'Httpdocs/', 'C:\Test\1TestFile.txt', '1TestFile.txt', 'myusername', 'mypassword');
0
 
LVL 1

Author Comment

by:pr_wainwright
Comment Utility
flob9,
         Sorry neither work.

Regards
Paul.
0
 
LVL 14

Expert Comment

by:flob9
Comment Utility
Try to get the error with InternetGetLastResponseInfo or GetLastError.
0
 
LVL 1

Author Comment

by:pr_wainwright
Comment Utility
Flob9,
         I get Error 6 (The Handle is Invalid)

Regards
Paul.
0
 
LVL 14

Expert Comment

by:flob9
Comment Utility
Check if InternetConnect succeed, and if not, grab the error code.

"I get Error 6 (The Handle is Invalid)" <<< it must be the hConnect
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 14

Expert Comment

by:flob9
Comment Utility
also check without the INTERNET_FLAG_PASSIVE
0
 
LVL 1

Author Comment

by:pr_wainwright
Comment Utility
flob9,
         How do I use internetGetLastResponseInfo?

Thanks
Paul.
0
 
LVL 1

Author Closing Comment

by:pr_wainwright
Comment Utility
My companys FTP policy was blocking the code. At home when tested your code worked fine.
Thanks
Paul.
0
 
LVL 14

Expert Comment

by:flob9
Comment Utility
something like this :
ErrorNum: Cardinal;

  ErrorBuf: string;

  ErrorLen: Cardinal;
 

[...]
 

hConnect := InternetConnect(hInet, 

                            remote_server, 

                            INTERNET_DEFAULT_FTP_PORT, 

                            user, pass, 

                            INTERNET_SERVICE_FTP, 

                            INTERNET_FLAG_PASSIVE, 

                            0); 
 

if InternetGetLastResponseInfo( Errornum, pChar( ErrorBuf ), ErrorLen ) then

begin 

SetLength( ErrorBuf, ErrorLen );

ShowMessage(ErrorBuf);

end

Open in new window

0
 
LVL 1

Author Comment

by:pr_wainwright
Comment Utility
flob9,
         Thanks for the code.

Regards
Paul.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Objective: - This article will help user in how to convert their numeric value become words. How to use 1. You can copy this code in your Unit as function 2. than you can perform your function by type this code The Code   (CODE) The Im…
When you create an app prototype with Adobe XD, you can insert system screens -- sharing or Control Center, for example -- with just a few clicks. This video shows you how. You can take the full course on Experts Exchange at http://bit.ly/XDcourse.
This tutorial demonstrates a quick way of adding group price to multiple Magento products.

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now