2017-08-09 32 views
0

使用此代碼我可以將文件上傳到服務器。但我想將其他值傳遞給php代碼以將該值插入到數據庫中。但以我使用的代碼我不能使它如何使用Android Studio中的DataOutputStream上傳文件並將其他參數傳遞到Web服務器

這裏是我寫的onClickListenter

public void onClick(View v) { 
    if(v== ivAttachment){ 

     //on attachment icon click 
     showFileChooser(); 
    } 
    if(v== bUpload){ 
     final String arippe = "arippe"; 

     //on upload button Click 
     if(selectedFilePath != null){ 
      dialog = ProgressDialog.show(MainActivity.this,"","Uploading File...",true); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        //creating new thread to handle Http Operations 
        uploadFile(selectedFilePath, arippe); 
       } 
      }).start(); 
     }else{ 
      Toast.makeText(MainActivity.this,"Please choose a File First",Toast.LENGTH_SHORT).show(); 
     } 

    } 
} 

下面的代碼是UploadFile功能代碼

public int uploadFile(final String selectedFilePath, String arippe){ 

    int serverResponseCode = 0; 

    HttpURLConnection connection; 
    DataOutputStream dataOutputStream; 
    String lineEnd = "\r\n"; 
    String twoHyphens = "--"; 
    String boundary = "*****"; 


    int bytesRead,bytesAvailable,bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 
    File selectedFile = new File(selectedFilePath); 


    String[] parts = selectedFilePath.split("/"); 
    final String fileName = parts[parts.length-1]; 

    if (!selectedFile.isFile()){ 
     dialog.dismiss(); 

     runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 
       tvFileName.setText("Source File Doesn't Exist: " + selectedFilePath); 
      } 
     }); 
     return 0; 
    }else{ 
     try{ 
      FileInputStream fileInputStream = new FileInputStream(selectedFile); 
      URL url = new URL(SERVER_URL); 
      connection = (HttpURLConnection) url.openConnection(); 
      connection.setDoInput(true);//Allow Inputs 
      connection.setDoOutput(true);//Allow Outputs 
      connection.setUseCaches(false);//Don't use a cached Copy 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); 
      connection.setRequestProperty("uploaded_file",selectedFilePath); 

      //creating new dataoutputstream 
      dataOutputStream = new DataOutputStream(connection.getOutputStream()); 

      dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"arippe\"" 
        + lineEnd); 
      dataOutputStream.writeBytes(lineEnd); 
      dataOutputStream.writeBytes(arippe); 
      dataOutputStream.writeBytes(lineEnd); 

      //writing bytes to data outputstream 
      dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); 
      dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" 
        + selectedFilePath + "\"" + lineEnd); 

      dataOutputStream.writeBytes(lineEnd); 

      //returns no. of bytes present in fileInputStream 
      bytesAvailable = fileInputStream.available(); 
      //selecting the buffer size as minimum of available bytes or 1 MB 
      bufferSize = Math.min(bytesAvailable,maxBufferSize); 
      //setting the buffer as byte array of size of bufferSize 
      buffer = new byte[bufferSize]; 

      //reads bytes from FileInputStream(from 0th index of buffer to buffersize) 
      bytesRead = fileInputStream.read(buffer,0,bufferSize); 

      //loop repeats till bytesRead = -1, i.e., no bytes are left to read 
      while (bytesRead > 0){ 
       //write the bytes read from inputstream 
       dataOutputStream.write(buffer,0,bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable,maxBufferSize); 
       bytesRead = fileInputStream.read(buffer,0,bufferSize); 
      } 

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

      serverResponseCode = connection.getResponseCode(); 
      String serverResponseMessage = connection.getResponseMessage(); 

      Log.i(TAG, "Server Response is: " + serverResponseMessage + ": " + serverResponseCode); 

      //response code of 200 indicates the server status OK 
      if(serverResponseCode == 200){ 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         tvFileName.setText("File Upload completed.\n\n You can see the uploaded file here: \n\n" + "http://coderefer.com/extras/uploads/"+ fileName); 
        } 
       }); 
      } 

      //closing the input and output streams 
      fileInputStream.close(); 
      dataOutputStream.flush(); 
      dataOutputStream.close(); 



     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        Toast.makeText(MainActivity.this,"File Not Found",Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } catch (MalformedURLException e) { 
      e.printStackTrace(); 
      Toast.makeText(MainActivity.this, "URL error!", Toast.LENGTH_SHORT).show(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
      Toast.makeText(MainActivity.this, "Cannot Read/Write File!", Toast.LENGTH_SHORT).show(); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 
    } 

} 

這裏是PHP代碼

$file_path = "uploads/"; 
    $a = "areef"; 
    $b = $_POST['arippe']; 


    $file_path = $file_path . basename($_FILES['uploaded_file']['name']); 
    $c = $file_path; 
    if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)){ 

    } else{ 
     echo "fail"; 
    } 
    $sql_query = "insert into users(name, user_name, user_pass) values('$a', '$b', '$c')"; 
    mysqli_query($mysqli, $sql_query); 

當我點擊上傳按鈕null值被張貼到user_name

+0

[將文件從Java客戶端上傳到HTTP服務器]可能重複(https://stackoverflow.com/questions/2469451/upload-files-from-java-client-to-a-http-server) – Yazan

+0

I推薦你使用loopj http://loopj.com/android-async-http/ –

回答

相關問題