Unable to Upload file to FTP.
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 2 of 2

Thread: Unable to Upload file to FTP.

  1. #1
    Join Date
    Feb 2011
    Posts
    1

    Unable to Upload file to FTP.

    Greetings,

    I have come to Codeguru in search of a solution for this error I am having with my Java Applet - What I am trying to do here is be able to gather certain information that is used in my program and then upload that information to my FTP in a .txt file (or any filetype, for that matter) - I am a relativly new Java coder and am just having problems with the FTP connection bit of this Applet, It would be highly appreciated if someone with a little more knowledge would take a look at my code and tell me what I am doing wrong, I have edited out my ftp password however if it should be required I will give it to anyone willing to help (as it is just a free FTP anyway) - I have pasted the code below, the main errors I am getting is when I click to upload the file contents to FTP it either gives an error saying it cannot change to the Directory mentioned, if I enter "/www/99k.org/e/f/f/effigylist/htdocs/" as the directory to navigate to it will give an error saying the directory is non-existent (this is the directory my free host gave to me) however when I leave that same box blank instead it will then give an error telling me that the filename is invalid for PUT - any information would be GREATLY appreciated!

    [code=java]package OldVersions.EffigyListV3;
    import java.net.*;
    import java.io.*;


    /** via:
    * http://www.ajaxapp.com/2009/02/21/a-simple-java-ftp-connection-file-download-and-upload/
    */
    public class SimpleFTPClient
    {
    /** The URL connection object */
    private URLConnection m_client;

    /** The FTP host/server to be connected */
    private String host;

    /** The FTP user */
    private String user;

    /** The FTP user’s password */
    private String password;

    /** The remote file that needs to be uploaded or downloaded */
    private String remoteFile;

    /** The previous error message triggered after a method is called */
    private String erMesg;

    /** The previous success message after any method is called */
    private String succMesg;

    public SimpleFTPClient(String host, String user, String password, String remoteFile){
    this.host = host;
    this.user = user;
    this.password = password;
    this.remoteFile = remoteFile;
    }

    /** Setter method for the FTP host/server */
    public void setHost(String host)
    {
    this.host = host;
    }

    /** Setter method for the FTP user */
    public void setUser(String user)
    {
    this.user = user;
    }

    /** Setter method for the FTP user’s password */
    public void setPassword(String p)
    {
    this.password = p;
    }

    /** Setter method for the remote file, this must include the sub-directory path relative
    to the user’s home directory, e.g you’e going to download a file that is within a sub directory
    called “sdir”, and the file is named “d.txt”, so you shall include the path as “sdir/d.txt”
    */
    public void setRemoteFile (String d)
    {
    this.remoteFile = d;
    }

    /** The method that returns the last message of success of any method call */
    public synchronized String getLastSuccessMessage()
    {
    if (succMesg==null) return ""; return succMesg;
    }

    /** The method that returns the last message of error resulted from any exception of any method call */
    public synchronized String getLastErrorMessage()
    {
    if (erMesg==null) return ""; return erMesg;
    }

    /** The method that handles file uploading, this method takes the absolute file path
    of a local file to be uploaded to the remote FTP server, and the remote file will then
    be transfered to the FTP server and saved as the relative path name specified in method setRemoteFile
    @param localfilename – the local absolute file name of the file in local hard drive that needs to
    FTP over
    */
    public synchronized boolean uploadFile (String localfilename)
    {
    try{
    InputStream is = new FileInputStream(localfilename);
    BufferedInputStream bis = new BufferedInputStream(is);
    OutputStream os =m_client.getOutputStream();
    BufferedOutputStream bos = new BufferedOutputStream(os);
    byte[] buffer = new byte[1024];
    int readCount;

    while( (readCount = bis.read(buffer)) > 0)
    {
    bos.write(buffer, 0, readCount);
    }
    bos.close();

    this.succMesg = "Uploaded!";

    return true;
    }
    catch(Exception ex)
    {
    StringWriter sw0= new StringWriter();
    PrintWriter p0= new PrintWriter(sw0,true);
    ex.printStackTrace(p0);
    erMesg = sw0.getBuffer().toString();

    return false;
    }
    }

    /** The method to download a file and save it onto the local drive of the client in the specified absolut path
    @param localfilename – the local absolute file name that the file needs to be saved as */
    public synchronized boolean downloadFile (String localfilename)
    {
    try{
    InputStream is = m_client.getInputStream();
    BufferedInputStream bis = new BufferedInputStream(is);

    OutputStream os = new FileOutputStream(localfilename);
    BufferedOutputStream bos = new BufferedOutputStream(os);

    byte[] buffer = new byte[1024];
    int readCount;

    while((readCount = bis.read(buffer)) > 0)
    {
    bos.write(buffer, 0, readCount);
    }
    bos.close();
    is.close(); // close the FTP inputstream
    this.succMesg = "Downloaded!";

    return true;
    }catch(Exception ex)
    {
    StringWriter sw0= new StringWriter();
    PrintWriter p0= new PrintWriter(sw0,true);
    ex.printStackTrace(p0);
    erMesg = sw0.getBuffer().toString();

    return false;
    }
    }

    /** The method that connects to the remote FTP server */
    public synchronized boolean connect()
    {
    try{

    URL url = new URL("ftp://"+user+":"+password+"@"+host+"/"+remoteFile+";type=i");

    m_client = url.openConnection();

    return true;

    }
    catch(Exception ex)
    {
    StringWriter sw0= new StringWriter();
    PrintWriter p0= new PrintWriter (sw0, true);
    ex.printStackTrace (p0);
    erMesg = sw0.getBuffer().toString();
    return false;
    }
    }

    public static void main(String[] s) {
    SimpleFTPClient test = new SimpleFTPClient("effigylist.99k.org", "effigylist_99k",
    "password", "/");// used to be: "/www/99k.org/e/f/f/effigylist/htdocs/"); for the 4th parameter, i have tried / and leaving this box blank to try and fix errors, no luck
    test.connect();
    System.out.println("Errors(connection): " + test.getLastErrorMessage());
    System.out.println("Other(connection): " + test.getLastSuccessMessage());

    test.uploadFile("C:\\Users\\Chad\\Documents\\EffigyListFTPTest.txt");
    System.out.println("Errors(upload): " + test.getLastErrorMessage());
    System.out.println("Other(upload): " + test.getLastSuccessMessage());
    }
    } [/code]

  2. #2
    Join Date
    Apr 2007
    Posts
    425

    Re: Unable to Upload file to FTP.

    Look what the connect method is doing. If you paste that in your browser, is that path found, and can you authenticate against it?

    As an edit also, you should probably re-work your main method to be a little safer in what you invoke. If you couldn't connect, don't bother trying to upload. Think about why the author of the FTP client returns boolean on the connect method.

    Code:
    SimpleFTPClient test = new SimpleFTPClient("effigylist.99k.org", "effigylist_99k",
    "password", "/");// used to be: "/www/99k.org/e/f/f/effigylist/htdocs/"); for the 4th parameter, i have tried / and leaving this box blank to try and fix errors, no luck
    if(test.connect()) {
       test.uploadFile("C:\\Users\\Chad\\Documents\\EffigyListFTPTest.txt");
       System.out.println("Errors(upload): " + test.getLastErrorMessage());
       System.out.println("Other(upload): " + test.getLastSuccessMessage());
    }
    Last edited by Deliverance; February 10th, 2011 at 02:26 PM.
    ------
    If you are satisfied with the responses, add to the user's rep!

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  


Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center