无法看到从android设备上传到PHP服务器的3gp文件


Not Able to see the uploaded 3gp file from android device to PHP Server

在我的android代码中,我试图将.3gp文件上传到XAMPP服务器。我重复使用了以下代码来上传文件:

 public int uploadFile(String sourceFileUri) {
     String fileName = sourceFileUri;
     HttpURLConnection conn = null;
     DataOutputStream dos = null;  
     String lineEnd = "'r'n";
     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() {
                  Toast.makeText(getApplicationContext(), "Source File not exist :"
                          +uploadFilePath + "" + uploadFileName, Toast.LENGTH_LONG).show();
              }
          }); 
          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.'n'n See uploaded file here : 'n'n"
                                         +" http://www.androidexample.com/media/uploads/" +uploadFileName;
                           Toast.makeText(getApplicationContext(), "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() {
                     Toast.makeText(getApplicationContext(), "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() {
                     Toast.makeText(getApplicationContext(), "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 
 }

具有以下参数:

  String upLoadServerUri = "http://"+iPAddress+"/patient/upload.php";
  /**********  File Path *************/
  final String uploadFilePath =  Environment.getExternalStorageDirectory().getPath()+"/Patient_Records/";
  final String uploadFileName = "record.3gp";

下面是我的upload.php文件:

<?php
   $file_path = "uploads/";
   $file_path = $file_path . basename( $_FILES['uploaded_file']['name']);
   if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) {
       echo "success";
   } else{
       echo "fail";
   }
?>

我在upload.php的同一目录中有一个目录uploads,更具体地说:

PHP文件upload.php完整路径为:C:'xampp'htdocs'patient'upload.php上传目录完整路径为:C:'xampp'htdocs'patient'uploads

android活动没有抱怨。在运行时,我收到消息"File Upload Complete.",好像一切都很顺利。但是,我在upload目录中找不到上传的文件。怎么了?

我建议您使用HttpClient类以多部分的形式发送数据。这里提到了一个简单的解决方案从Android手机到服务器的视频文件传输(https://stackoverflow.com/a/17673687/2482430)这对你的很有用

代码

public void uploadVideo(Context context, String videoPath) {
        try {
            HttpClient httpClient = new DefaultHttpClient();
            HttpPost postRequest = new HttpPost(context.getString(R.string.url_service_fbpost));
            MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
            if(!videoPath.isEmpty()){
                FileBody filebodyVideo = new FileBody(new File(videoPath));
                reqEntity.addPart("uploaded", filebodyVideo);
            }
            postRequest.setEntity(reqEntity);
            HttpResponse response = httpClient.execute(postRequest);
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    response.getEntity().getContent(), "UTF-8"));
            String sResponse;
            StringBuilder s = new StringBuilder();
            while ((sResponse = reader.readLine()) != null) {
                s = s.append(sResponse);
            }
            Log.e("Response: ", s.toString());
            return true;
        } catch (Exception e) {
            Log.e(e.getClass().getName(), e.getMessage());
            return false;
        }
}