doujiaci7976 2014-03-17 06:36
浏览 11

Android HTTP帖子文件

Currently I have an Android app that does http post of data to a webserver which has a php script to receive the data and save into a text file.

Below are the code snippets:

Android:

 public void postData(String id, String data) {

         // Create a new HttpClient and Post Header
         HttpClient httpclient = new DefaultHttpClient();
         HttpPost httppost = new HttpPost("<server_ip>/phppost.php");

         try {
             // Add your data
             List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
             nameValuePairs.add(new BasicNameValuePair("id", id));
             nameValuePairs.add(new BasicNameValuePair("stringdata", data));
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

             // Execute HTTP Post Request
             HttpResponse response = httpclient.execute(httppost);

         } catch (ClientProtocolException e) {
             // TODO Auto-generated catch block
         } catch (IOException e) {
             // TODO Auto-generated catch block
         }
}

php script:

<?php

$id = $_POST['id'];
$file = $id . ".txt";
$data = $_POST['stringdata'];
file_put_contents($file, $data);

?>

But this is for data and it could work without any issue. How do I do the same for a file? Meaning a *.mp3 or *.txt files. How do I http post files and how do I modify the php script to receive the files?

Thanks In Advance

  • 写回答

2条回答 默认 最新

  • drm30963 2014-03-17 06:41
    关注

    Have a look at this Android Example

    public int uploadFile(String sourceFileUri) {
    
    
              String fileName = sourceFileUri;
    
              HttpURLConnection conn = null;
              DataOutputStream dos = null;  
              String lineEnd = "
    ";
              String twoHyphens = "--";
              String boundary = "*****";
              int bytesRead, bytesAvailable, bufferSize;
              byte[] buffer;
              int maxBufferSize = 1 * 1024 * 1024; 
              File sourceFile = new File(sourceFileUri); 
    
              if (!sourceFile.isFile()) {
    
                   dialog.dismiss(); 
    
                   Log.e("uploadFile", "Source File not exist :"
                                       +uploadFilePath + "" + uploadFileName);
    
                   runOnUiThread(new Runnable() {
                       public void run() {
                           messageText.setText("Source File not exist :"
                                   +uploadFilePath + "" + uploadFileName);
                       }
                   }); 
    
                   return 0;
    
              }
              else
              {
                   try { 
    
                         // open a URL connection to the Servlet
                       FileInputStream fileInputStream = new FileInputStream(sourceFile);
                       URL url = new URL(upLoadServerUri);
    
                       // Open a HTTP  connection to  the URL
                       conn = (HttpURLConnection) url.openConnection(); 
                       conn.setDoInput(true); // Allow Inputs
                       conn.setDoOutput(true); // Allow Outputs
                       conn.setUseCaches(false); // Don't use a Cached Copy
                       conn.setRequestMethod("POST");
                       conn.setRequestProperty("Connection", "Keep-Alive");
                       conn.setRequestProperty("ENCTYPE", "multipart/form-data");
                       conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                       conn.setRequestProperty("uploaded_file", fileName); 
    
                       dos = new DataOutputStream(conn.getOutputStream());
    
                       dos.writeBytes(twoHyphens + boundary + lineEnd); 
                       dos.writeBytes("Content-Disposition: form-data; name="uploaded_file";filename=""
                                                 + fileName + """ + lineEnd);
    
                       dos.writeBytes(lineEnd);
    
                       // create a buffer of  maximum size
                       bytesAvailable = fileInputStream.available(); 
    
                       bufferSize = Math.min(bytesAvailable, maxBufferSize);
                       buffer = new byte[bufferSize];
    
                       // read file and write it into form...
                       bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
    
                       while (bytesRead > 0) {
    
                         dos.write(buffer, 0, bufferSize);
                         bytesAvailable = fileInputStream.available();
                         bufferSize = Math.min(bytesAvailable, maxBufferSize);
                         bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
    
                        }
    
                       // send multipart form data necesssary after file data...
                       dos.writeBytes(lineEnd);
                       dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    
                       // Responses from the server (code and message)
                       serverResponseCode = conn.getResponseCode();
                       String serverResponseMessage = conn.getResponseMessage();
    
                       Log.i("uploadFile", "HTTP Response is : "
                               + serverResponseMessage + ": " + serverResponseCode);
    
                       if(serverResponseCode == 200){
    
                           runOnUiThread(new Runnable() {
                                public void run() {
    
                                    String msg = "File Upload Completed.
    
     See uploaded file here : 
    
    "
                                                  +"Your/service/url"
                                                  +uploadFileName;
    
                                    messageText.setText(msg);
                                    Toast.makeText(UploadToServer.this, "File Upload Complete.", 
                                                 Toast.LENGTH_SHORT).show();
                                }
                            });                
                       }    
    
                       //close the streams //
                       fileInputStream.close();
                       dos.flush();
                       dos.close();
    
                  } catch (MalformedURLException ex) {
    
                      dialog.dismiss();  
                      ex.printStackTrace();
    
                      runOnUiThread(new Runnable() {
                          public void run() {
                              messageText.setText("MalformedURLException Exception : check script url.");
                              Toast.makeText(UploadToServer.this, "MalformedURLException", 
                                                                  Toast.LENGTH_SHORT).show();
                          }
                      });
    
                      Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
                  } catch (Exception e) {
    
                      dialog.dismiss();  
                      e.printStackTrace();
    
                      runOnUiThread(new Runnable() {
                          public void run() {
                              messageText.setText("Got Exception : see logcat ");
                              Toast.makeText(UploadToServer.this, "Got Exception : see logcat ", 
                                      Toast.LENGTH_SHORT).show();
                          }
                      });
                      Log.e("Upload file to server Exception", "Exception : "
                                                       + e.getMessage(), e);  
                  }
                  dialog.dismiss();       
                  return serverResponseCode; 
    
               } // End else block 
             } 
    

    And invoke that function like

     new Thread(new Runnable() {
                            public void run() {
                                 runOnUiThread(new Runnable() {
                                        public void run() {
                                          //Show information to user that file is uploading
                                        }
                                    });                      
    
                                 uploadFile(uploadFilePath + "" + uploadFileName);
    
                            }
                          }).start();        
                    }
    

    And don`t forget to add permission

     <uses-permission android:name="android.permission.INTERNET"/>
    
    评论

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向