dpgu5074 2013-12-05 10:45
浏览 57
已采纳

无法看到从Android设备上传的3gp文件到PHP Server

In my android code, I am trying to upload a .3gp file to XAMPP server. I reused the following code for uploading the file:

 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() {
                  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.

 See uploaded file here : 

"
                                         +" 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 
 }

With the following parameters:

  String upLoadServerUri = "http://"+iPAddress+"/patient/upload.php";

  /**********  File Path *************/
  final String uploadFilePath =  Environment.getExternalStorageDirectory().getPath()+"/Patient_Records/";
  final String uploadFileName = "record.3gp";

below is my upload.php file:

<?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";
   }
?>

I do have a directory uploads in the same directory of upload.php, more specifically:

The PHP file upload.php full path is: C:\xampp\htdocs\patient\upload.php The upload directory full path is: C:\xampp\htdocs\patient\uploads

The android activity does not complain. During runtime, I get the message "File Upload Complete." as if everything went well. However, I do NOT find the uploaded file in the upload directory. What's wrong?

  • 写回答

1条回答 默认 最新

  • douyan2470 2013-12-05 10:52
    关注

    I would recommend you using HttpClient class to send data in the form of multi-part. There's a simple solution mentioned here Video file transfer from Android phone to server (https://stackoverflow.com/a/17673687/2482430) which can be useful for you

    Code

    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;
            }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥15 pyqt信号槽连接写法
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。