Ftp anslutning från min android app

Diskussion i 'Frågor, support och diskussion' startad av sika, 16 maj 2011.

  1. sika

    sika Baby Droid Medlem

    Blev medlem:
    25 feb 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Hej,

    Jag försöker koppla upp till en FTP-server via min android app, och ladda upp filer till den. Jag kan koppla upp och logga in på den, men sen får jag FileNotFound när jag vill ladda upp filen. Jag använder biblioteket från org.apache.commons.net.ftp.FTPClient.

    Tidigare fick jag istället nullpointerexception, vet ej vad skillnaden då var.

    Någon som vet vad felet är, eller som har tips om vad jag bör prova istället?

    Min kod:
    HTML:
    
    		String locationOfFileIncludingNameOfFileWithPostfix = "D:\\My Documents\\Dropbox\\Infocom\\Programming\\Shared\\RentARam_1\\testtesttest.txt";
    		FTPClient con = new FTPClient();
    		try
    		{
    			con.connect(ftpAddress);
    			if (con.login(username, password))
    			{
    				con.enterLocalPassiveMode();
    				con.setFileType(FTP.BINARY_FILE_TYPE);
    				File f = new File("D:\\My Documents\\Dropbox\\Infocom\\Programming\\Shared\\RentARam_1\\testtesttest.txt"); // filväg
    																					// med
    																					// namn
    																					// och
    																					// filändelse
    				boolean result = con.storeFile(f.getName(),
    						new FileInputStream(f));
    				if (result)
    					Log.v("upload result", "succeeded");
    			}
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    
    		try
    		{
    			con.logout();
    			con.disconnect();
    		} catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    
    
    Logcat
    HTML:
    05-16 10:59:37.349: WARN/System.err(6928): java.io.FileNotFoundException: /D:/My Documents/Dropbox/Infocom/Programming/Shared/RentARam_1/testtesttest.txt (No such file or directory)
    05-16 10:59:37.369: WARN/System.err(6928):     at org.apache.harmony.luni.platform.OSFileSystem.openImpl(Native Method)
    05-16 10:59:37.369: WARN/System.err(6928):     at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:152)
    05-16 10:59:37.369: WARN/System.err(6928):     at java.io.FileInputStream.<init>(FileInputStream.java:82)
    05-16 10:59:37.379: WARN/System.err(6928):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
    05-16 10:59:37.379: WARN/System.err(6928):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
    05-16 10:59:37.399: WARN/System.err(6928):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2621)
    05-16 10:59:37.399: WARN/System.err(6928):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
    05-16 10:59:37.399: WARN/System.err(6928):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    05-16 10:59:37.409: WARN/System.err(6928):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
    05-16 10:59:37.409: WARN/System.err(6928):     at android.widget.TabHost.setCurrentTab(TabHost.java:323)
    05-16 10:59:37.409: WARN/System.err(6928):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
    05-16 10:59:37.419: WARN/System.err(6928):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
    05-16 10:59:37.419: WARN/System.err(6928):     at android.view.View.performClick(View.java:2408)
    05-16 10:59:37.419: WARN/System.err(6928):     at android.view.View$PerformClick.run(View.java:8817)
    05-16 10:59:37.429: WARN/System.err(6928):     at android.os.Handler.handleCallback(Handler.java:587)
    05-16 10:59:37.429: WARN/System.err(6928):     at android.os.Handler.dispatchMessage(Handler.java:92)
    05-16 10:59:37.429: WARN/System.err(6928):     at android.os.Looper.loop(Looper.java:143)
    05-16 10:59:37.439: WARN/System.err(6928):     at android.app.ActivityThread.main(ActivityThread.java:4914)
    05-16 10:59:37.439: WARN/System.err(6928):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-16 10:59:37.439: WARN/System.err(6928):     at java.lang.reflect.Method.invoke(Method.java:521)
    05-16 10:59:37.439: WARN/System.err(6928):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    05-16 10:59:37.449: WARN/System.err(6928):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    05-16 10:59:37.459: WARN/System.err(6928):     at dalvik.system.NativeStart.main(Native Method)
    
     
    Last edited: 16 maj 2011
  2. pirko

    pirko Infant Droid Medlem

    Blev medlem:
    8 apr 2011
    Inlägg:
    10
    Mottagna gillanden:
    1

    MINA ENHETER

    Det här verkar vara en sökväg till en fil på din lokala dator?
    Ändra den så att den pekar på en fil som ligger på din telefon istället.
     
  3. sika

    sika Baby Droid Medlem

    Blev medlem:
    25 feb 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Touché! :)

    Detta är nu ordnat, men får ett nytt exception:

    HTML:
    05-17 14:12:39.766: WARN/System.err(2321): java.net.SocketException: Bad file number
    05-17 14:12:39.785: WARN/System.err(2321):     at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method)
    05-17 14:12:39.785: WARN/System.err(2321):     at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723)
    05-17 14:12:39.785: WARN/System.err(2321):     at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578)
    05-17 14:12:39.795: WARN/System.err(2321):     at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
    05-17 14:12:39.795: WARN/System.err(2321):     at java.io.BufferedOutputStream.flushInternal(BufferedOutputStream.java:224)
    05-17 14:12:39.805: WARN/System.err(2321):     at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:113)
    05-17 14:12:39.805: WARN/System.err(2321):     at java.io.FilterOutputStream.close(FilterOutputStream.java:61)
    05-17 14:12:39.815: WARN/System.err(2321):     at java.io.BufferedOutputStream.close(BufferedOutputStream.java:187)
    05-17 14:12:39.815: WARN/System.err(2321):     at org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:582)
    05-17 14:12:39.825: WARN/System.err(2321):     at org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1702)
    05-17 14:12:39.825: WARN/System.err(2321):     at rentaram_app_1.Cart.ftpServer(Cart.java:131)
    05-17 14:12:39.825: WARN/System.err(2321):     at rentaram_app_1.Cart.onCreate(Cart.java:103)
    05-17 14:12:39.825: WARN/System.err(2321):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1065)
    05-17 14:12:39.845: WARN/System.err(2321):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2745)
    05-17 14:12:39.845: WARN/System.err(2321):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2621)
    05-17 14:12:39.845: WARN/System.err(2321):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
    05-17 14:12:39.855: WARN/System.err(2321):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    05-17 14:12:39.855: WARN/System.err(2321):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
    05-17 14:12:39.855: WARN/System.err(2321):     at android.widget.TabHost.setCurrentTab(TabHost.java:323)
    05-17 14:12:39.865: WARN/System.err(2321):     at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:129)
    05-17 14:12:39.865: WARN/System.err(2321):     at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:453)
    05-17 14:12:39.865: WARN/System.err(2321):     at android.view.View.performClick(View.java:2408)
    05-17 14:12:39.865: WARN/System.err(2321):     at android.view.View$PerformClick.run(View.java:8817)
    05-17 14:12:39.875: WARN/System.err(2321):     at android.os.Handler.handleCallback(Handler.java:587)
    05-17 14:12:39.875: WARN/System.err(2321):     at android.os.Handler.dispatchMessage(Handler.java:92)
    05-17 14:12:39.895: WARN/System.err(2321):     at android.os.Looper.loop(Looper.java:143)
    05-17 14:12:39.895: WARN/System.err(2321):     at android.app.ActivityThread.main(ActivityThread.java:4914)
    05-17 14:12:39.895: WARN/System.err(2321):     at java.lang.reflect.Method.invokeNative(Native Method)
    05-17 14:12:39.895: WARN/System.err(2321):     at java.lang.reflect.Method.invoke(Method.java:521)
    05-17 14:12:39.905: WARN/System.err(2321):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
    05-17 14:12:39.905: WARN/System.err(2321):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
    05-17 14:12:39.905: WARN/System.err(2321):     at dalvik.system.NativeStart.main(Native Method)
    
    
    HTML:
    String locationOfFileIncludingNameOfFileWithPostfix = "/mnt/sdcard/download/DSC00209.jpeg";
    		//replace characters for use in FTP
    		String locationOfFileIncludingNameOfFileWithPostfixForFTP = locationOfFileIncludingNameOfFileWithPostfix.replace( '/', '\\' );
    		
    		FTPClient con = new FTPClient();
    		try
    		{
    			con.connect(ftpAddress);
    			if (con.login(username, password))
    			{
    				con.enterLocalPassiveMode();
    				con.setFileType(FTP.BINARY_FILE_TYPE);
    				File f = new File(locationOfFileIncludingNameOfFileWithPostfixForFTP); // filväg
    				FileInputStream fi = new FileInputStream(f);																// med
    																					// namn
    																					// och
    																					// filändelse
    				boolean result = con.storeFile(f.getName(), fi);
    				if (result)
    					Log.v("upload result", "succeeded");
    			}
    		} catch (Exception e)
    		{
    			e.printStackTrace();
    		}
    
    		try
    		{
    			con.logout();
    			con.disconnect();
    		} catch (IOException e)
    		{
    			e.printStackTrace();
    		}
    
    
    Någon som vet vad detta beror på? Vore jättetacksam för hjälp!
     
  4. pirko

    pirko Infant Droid Medlem

    Blev medlem:
    8 apr 2011
    Inlägg:
    10
    Mottagna gillanden:
    1

    MINA ENHETER

    Där borde det väl stå File f = new File(locationOfFileIncludingNameOfFileWithPostfix);
    D.v.s. filnamnet utan ftp-fixen eftersom du vill öppna den lokala filen.

    Här borde det stå boolean result = con.storeFile(locationOfFileIncludingNameOfFileWithPostfixForFTP, fi)
    D.v.s. filnamnet med ftp-fixen eftersom första argument till storeFile är sökvägen till dit du vill spara filen på ftp-servern. Antar att katalogen måste finnas på serven.
     
  5. sika

    sika Baby Droid Medlem

    Blev medlem:
    25 feb 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Låter mycket vettigt, provade även detta. Dock ser jag att några filer har faktiskt överförts tidigare idag, alltså innan ändringen. Dessutom får jag inget exception på att filerna inte hittas.

    Känns som att det är något fel på själva uppkopplingen mellan android och servern eller själva överföringen.

    Till synes helt slumpvis får jag alltså en lyckad överföring (sånär, HTM filerna är tomma) någon gång då och då. Läste på en sida att felet ofta beror på det finns för många samtidiga anslutningar mot FTP-servern för den att hantera. Vidare står det:
    This may be alleviated by both
    increasing the available number of sockets which clients may
    connect to the webserver with and also by reducing the amount
    of time that idle connections remain open:

    ndd -set /dev/tcp tcp_conn_req_max 1024

    ndd -set /dev/tcp tcp_keepalive_interval 30000


    Kan detta hjälpa tro, och i så fall: Hur utför jag kommandona ovan (servern finns hos en kompis som jag behöver kontakta om detta)?
     
  6. sika

    sika Baby Droid Medlem

    Blev medlem:
    25 feb 2011
    Inlägg:
    17
    Mottagna gillanden:
    0

    MINA ENHETER

    Körde en HTTP-anslutning med PHP istället och det funkade superbt! Tack för hjälpen i vilket!

    Denna tråden kan stängas nu för min del.