使用网络服务?

问题描述:

我想复制服务器上的所有视频文件&将它保存在Web服务的Web内容文件夹中,以便稍后可以看到它!使用网络服务?

我应该如何进行?

基本上你需要两面。第一个是在Android上。你必须发送(在ASyncTask e.x.中执行)数据到你的web服务。在这里,我做你一个小方法,它发送一个文件和一些额外的POST值的网址:

private boolean handleFile(String filePath, String mimeType) {  
    HttpURLConnection connection = null; 
    DataOutputStream outStream = null; 
    DataInputStream inStream = null; 

    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 

    int bytesRead, bytesAvailable, bufferSize; 

    byte[] buffer; 

    int maxBufferSize = 1*1024*1024; 

    String urlString = "http://your.domain.com/webservice.php"; 

    try { 
     FileInputStream fileInputStream = null; 
     try { 
      fileInputStream = new FileInputStream(new File(filePath)); 
     } catch(FileNotFoundException e) { } 
     URL url = new URL(urlString); 
     connection = (HttpURLConnection) url.openConnection(); 
     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setUseCaches(false); 

     SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

     connection.setRequestMethod("POST"); 
     connection.setRequestProperty("Connection", "Keep-Alive"); 
     connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);    

     outStream = new DataOutputStream(connection.getOutputStream()); 

     // Some POST values 
     outStream.writeBytes(addParam("additional_param", "some value"); 
     outStream.writeBytes(addParam("additional_param 2", "some other value");    

     // The file with the name "uploadedfile" 
     outStream.writeBytes(twoHyphens + boundary + lineEnd); 
     outStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + filePath +"\"" + lineEnd + "Content-Type: " + mimeType + lineEnd + "Content-Transfer-Encoding: binary" + lineEnd);   
     outStream.writeBytes(lineEnd); 

     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 

     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

      while (bytesRead > 0) { 
       outStream.write(buffer, 0, bufferSize); 
      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     } 

     outStream.writeBytes(lineEnd); 
     outStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); 

     fileInputStream.close(); 
     outStream.flush(); 
     outStream.close(); 
    } catch (MalformedURLException e) { 
     Log.e("APP", "MalformedURLException while sending\n" + e.getMessage()); 
    } catch (IOException e) { 
     Log.e("APP", "IOException while sending\n" + e.getMessage()); 
    } 


    // This part checks the response of the server. If its "UPLOAD OK" the method returns true 
    try { 
     inStream = new DataInputStream(connection.getInputStream()); 
     String str; 

     while ((str = inStream.readLine()) != null) { 
      if(str=="UPLOAD OK") { 
       return true; 
      } else { 
       return false; 
      } 
     } 
     inStream.close(); 
    } catch (IOException e){ 
     Log.e("APP", "IOException while sending\n" + e.getMessage()); 
    } 
    return false; 
} 

现在,我们已经得到了对方:http://your.domain.com/webservice.php 您的服务器。它需要一些逻辑(例如PHP)来处理发送的POST请求。 像这样的工作:

<?php 
    $target_path = "videos/";  

    $target_path = $target_path.'somename.3gp'; 
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
     exit("UPLOAD OK"); 
    } else { 
     exit("UPLOAD NOT OK"); 
    } 
?> 
+0

嘿感谢一吨!这是很好的给我一个踢开始。我会与它合作,如果有任何问题将再次联系 – NickHalden 2010-08-09 07:35:51

+0

谢谢,并没有问题:) 与ASyncTask的东西是重要的。想象一下,你有一个5MiB文件要上传,用户在这个屏幕上被拦截,没有任何反应,甚至没有加载图标等等。 – 2010-08-09 08:47:34