2012-10-08 93 views
1

我想將所有文件從服務器複製到Android設備。 假設在服務器上,我的服務器ip是http://192.168.98.23,並且服務器文件夾的名稱是數據Data文件夾包含許多文件。 我想將服務器Data中的所有文件複製到我的Android設備的SD卡上。將所有文件從服務器複製到Android設備

我該怎麼做?

+0

您打算在局域網使用此或不是本地的網絡環境?你打算把這個任務重複一遍或者只是一次性的事件嗎? – Jester

+1

它是一些特定的服務器(例如Apache,IIS?)。 –

+0

你可以將文件夾轉換成.zip文件並且下載它在您的SDCard或您的應用程序路徑... – prakash

回答

2

正如你可以說你正在使用LAN將文件從服務器傳輸到Android(Sdcard)。 爲此,您可以使用兩種方法。即i)TCP/IP協議。 ii)SMB(服務器消息塊)協議。 我建議你使用SMB協議,因爲在這你必須共享一個具有完全權限的文件夾並將所有文件複製到Android Sdcard。在這種情況下,Android是您的客戶端,您必須使用四件事。 i)服務器的IP地址。 ii)服務器的密碼。 iii)服務器的用戶名和最後一個iv)共享文件夾名稱。 在這四個參數的幫助下,您進行連接並複製放置到共享文件夾中的所有文件。

請按照用於使用smb protocole建立連接的代碼片段。

public boolean VerifyUser(String address, String username, String password) 
{ 
    try 
    { 
     if (address != "" && username != "" && password != "") 
     { 
      setDomain(UniAddress.getByName(address)); 
      setAuthentication(new NtlmPasswordAuthentication(null, 
        username, password)); 
      SmbSession.logon(getDomain(), authentication); 
      return true; 
     } 
     else 
     {    
      return false; 
     } 
    } 
    catch (UnknownHostException e) 
    {  
     return false; 
    } 
    catch (SmbException e) 
    {   
     return false; 
    } 

}// End VerifyUser Method. 
// ******************************************************************************************************* 

使用SMB連接從PC服務器Dowbload文件從PC服務器到Android客戶端。其中strPCPath =「smb://」+ 192.168.98.23+「/」+ strFolderName +「/ FileName」;吹碼是下載單個文件包含.config擴展名,您可以使用它來下載多個文件。

public boolean downloadConfigFileFromServer(String strPCPath , String strSdcardPath) 
{ 
    SmbFile smbFileToDownload = null;  
    try 
    { 
     File localFilePath = new File(strSdcardPath); 

     // create sdcard path if not exist. 
     if (!localFilePath.isDirectory()) 
     { 
      localFilePath.mkdir(); 
     } 
     try 
     {     
      smbFileToDownload = new SmbFile(strPCPath , authentication); 
      String smbFileName = smbFileToDownload.getName(); 

      if (smbFileName.toLowerCase().contains(".config")) 
      { 
       InputStream inputStream = smbFileToDownload.getInputStream(); 

       //only folder's path of the sdcard and append the file name after. 
       localFilePath = new File(strSdcardPath+ "/" + smbFileName); 

       OutputStream out = new FileOutputStream(localFilePath); 
       byte buf[] = new byte[1024]; 
       int len; 
       while ((len = inputStream.read(buf)) > 0) 
       { 
        out.write(buf, 0, len); 
       } 
       out.flush(); 
       out.close(); 
       inputStream.close(); 
       return true; 
      } 
      else 
       return false; 
     }// End try 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
      return false; 
     } 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
     return false; 
    } 

}// End downloadConfigFileFromServer Method. 
// ******************************************************************************************************* 
+0

你能解釋一下使用代碼嗎? – user1153176

+0

@Imran:我錯過了什麼?如何複製? – RvdK

+0

使用SMB方法必須使用「jcifs-1.1.11.jar」文件,因爲所有的smb類都依賴於這個jar文件。你可以下載它,我沒有這個jar文件的鏈接。你可以從谷歌搜索它。 –

1

該邏輯從服務器下載數據爲.Zip文件。這將從您的域名服務器文件夾獲取數據並保存到PATH =「」 /數據/數據/ your_pkg_name/app_my_sub_dir /圖片/「;
//下載內容

  Thread t = new Thread() { 
       @Override 
       public void run() { 
        try { 


         URL url = new URL(
           "http://192.168.98.23/Data"); 
         HttpURLConnection connection = (HttpURLConnection) url 
           .openConnection(); 

         connection.connect(); 

         int fileLength = connection.getContentLength(); 

         //System.out.println("fileLength: " + fileLength); 

         int size, BUFFER_SIZE = 8192; 
         int total = 0, progress = 0; 
         byte[] buffer = new byte[BUFFER_SIZE]; 
         String PATH = "/data/data/your_pkg_name/app_my_sub_dir/"; 
         String location = PATH + "images/"; 
         try { 
          if (!location.endsWith("/")) { 
           location += "/"; 
          } 
          File f = new File(location); 
          if (!f.isDirectory()) { 
           f.mkdirs(); 
          } 
          ZipInputStream zin = new ZipInputStream(
            connection.getInputStream()); 
          try { 
           ZipEntry ze = null; 
           while ((ze = zin.getNextEntry()) != null) { 
            String path = location + ze.getName(); 
            File unzipFile = new File(path); 

            if (ze.isDirectory()) { 
             if (!unzipFile.isDirectory()) { 
              unzipFile.mkdirs(); 
             } 
            } else { 
             // check for and create parent 
             // directories if they don't exist 
             File parentDir = unzipFile 
               .getParentFile(); 
             if (null != parentDir) { 
              if (!parentDir.isDirectory()) { 
               parentDir.mkdirs(); 
              } 
             } 

             // unzip the file 
             FileOutputStream out = new FileOutputStream(
               unzipFile, false); 
             BufferedOutputStream fout = new BufferedOutputStream(
               out, BUFFER_SIZE); 
             try { 
              while ((size = zin.read(buffer, 0, 
                BUFFER_SIZE)) != -1) { 
               total += size; 
               progress += total * 70/fileLength; 
               if (progress == 1) { 
                progressBarStatus = progressBarStatus 
                  + progress; 
                handlerProgressBar 
                  .sendEmptyMessage(0); 
                total = progress = 0; 
               } 
               fout.write(buffer, 0, size); 
               fout.flush(); 
              } 

              zin.closeEntry(); 
             } finally { 
              fout.close(); 
             } 
            } 
           } 
          } finally { 
           zin.close(); 
          } 
         } catch (Exception e) { 

         } 
         // this.notify(); 
        } catch (Exception e) { 
         interrput=true; 
         handler.sendEmptyMessage(1); 
        } 
       } 
      }; 

      t.start(); 
相關問題