使用android将文件上传到服务器

问题描述:

我一直在研究android上的应用程序,该应用程序应该从SD卡抓取图像,然后将其上传到我的服务器。我能够得到图片上传到服务器使用这个作为uri的例子给了“http://www.androidexample.com/media/UploadToServer.php。但是图像不会上传到我的本地主机服务器我使用本地主机从Android设备使用URI的192.1xx 。.x.xxx/uploadtoserver.php我收到一个serverresponse 200和OK使用android将文件上传到服务器

我用Google搜索答案和研究3天,不能得到这个工作

我的代码:。

的Java部分:

public class UploadToServer extends Activity { 

TextView messageText; 
Button uploadButton; 
int serverResponseCode = 0; 
ProgressDialog dialog = null; 

String upLoadServerUri = null; 

/********** File Path *************/ 
String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 

final String uploadFilePath = path + "/MyApp/Temp/"; 
final String uploadFileName = "temp.png"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_upload_to_server); 

    uploadButton = (Button)findViewById(R.id.uploadButton); 
    messageText = (TextView)findViewById(R.id.messageText); 

    messageText.setText("Uploading file path :- '/mnt/sdcard/"+uploadFileName+"'"); 

    /************* Php script path ****************/ 
    upLoadServerUri = "http://192.168.1.144/UploadToServer.php"; 

    uploadButton.setOnClickListener(new OnClickListener() {    
     @Override 
     public void onClick(View v) { 

      dialog = ProgressDialog.show(UploadToServer.this, "", "Uploading file...", true); 

      new Thread(new Runnable() { 
        public void run() { 
         runOnUiThread(new Runnable() { 
           public void run() { 
            messageText.setText("uploading started....."); 
           } 
          });      

         uploadFile(uploadFilePath + "" + uploadFileName); 

        } 
        }).start();   
      } 
     }); 
} 

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() { 
        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.\n\n See uploaded file here : \n\n" 
              +" http://192.168.1.144/UploadToServer.php/" 
              +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 
    } 

}

由于它工作在一台服务器上,我相信这是一个服务器端的问题

PHP部分

<?php 
$target_path1 = "var/www/images/" 
$target_path1 = $target_path1 . basename($_FILES['uploaded_file']['name']); 
if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1)) { 
echo "Success"; 
} else{ 
echo "fail";} 
?> 
+0

没有ü解决了这个错误,并得到了输出? – AndroidOptimist

<?php 
    $target_path1 = "/var/www/images/" 
    $target_path1 = $target_path1 . basename($_FILES['uploaded_file']['name']); 
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1)) { 
     echo "Success"; 
    } else { 
     echo "fail"; 
    } 
?> 

它看起来像你引用一个相对目录:var/www/images/其中,如果您的php文件在/var/www/开头将指向/var/www/var/www/images/,我怀疑是你的意图。

只要改变$target_path1使它成为绝对路径/var/www/images/

+0

这里在我的情况下显示“开始上传”,但之后没有失败或成功的消息 – AndroidOptimist

+0

什么显示此消息? –

+0

它显示“开始上传”的消息,但很长一段时间后也没有任何反应,我检查了我的网络连接,它很好,我的文件大小也只是很小。 – AndroidOptimist