2017-12-25 21 views
0

私のアンドロイドアプリのUIで、ユーザーは選択した動画URIを取得してビデオのサムネイルを作成して保存した後、ギャラリーから動画を選択できますユーザーsdcardと画像のURIを取得します。アンドロイドアプリから画像URLと画像URLを一緒にPHPサーバに送信

今私は、サーバーに映像を送信するために以下のコードを使用しています -

//Store video to server 
       FileInputStream fileInputStream = new FileInputStream(selectedFile); 
       URL url = new URL(SERVER_URL+"?emailid="+uEmailID); 
       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()); 

       //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() { 
          textViewResponse.setText("File Upload completed.\n\n"); 
         } 
        }); 
       } 

映像が正常にサーバーにアップロードされ、その作業。 ここでは、ビデオと画像の両方のURLを一緒に送信したいと思います。私の上記のコードを使用すれば可能です。ヒントやアイデアは大歓迎です。

+0

アップロードしたファイルと同じように、出力ストリームにフォームデータを書き込みます。 – frz3993

+0

@ frz3993 .........任意のサンプルが役に立ちます –

+0

サーバは何を予期していますか? – Akhil

答えて

1

それはこのようなものでなければなりません:PHPで

FileInputStream imageStream = new FileInputStream(imageFile); 
//Part below should go after the previous file boundary 
dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_image\";filename=\""+ imageFilePath + "\"" + lineEnd); 
//Change this to whatever the content type is 
dataOutputStream.writeBytes("Content-Type: image/png"+lineEnd); 

dataOutputStream.writeBytes(lineEnd); 

bytesAvailable = imageStream.available(); 
bufferSize = Math.min(bytesAvailable,maxBufferSize); 
buffer = new byte[bufferSize]; 

bytesRead = imageStream.read(buffer,0,bufferSize); 

while (bytesRead > 0){ 
     dataOutputStream.write(buffer,0,bufferSize); 
     bytesAvailable = imageStream.available(); 
     bufferSize = Math.min(bytesAvailable,maxBufferSize); 
     bytesRead = imageStream.read(buffer,0,bufferSize); 
} 

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

ファイルは$_FILES['uploaded_image']スーパーグローバルで利用できるはずです。

マルチパート/フォームデータ、生のリクエストボディは、次のようになります。

-----------------------boundary 
Content-Disposition: form-data; name="uploaded_file"; filename="video.mp4" 
Content-Type: video/mp4 

[the bytes] 
-----------------------boundary 
Content-Disposition: form-data; name="uploaded_image"; filename="filename.png" 
Content-Type: image/png 

[the bytes] 
-----------------------boundary-- 

name="uploaded_file"を持つことができます両方とPHPであなたの$_FILES['uploaded_file']は、複数のファイルをアップロードするに似て両方のファイルの内容が含まれています。 追加するのを忘れた場合は、最後の境界に2つの余分なハイフンを末尾に付ける必要があります。

+0

はこの方法で行いましたが、サーバー側では$ _FILES ['uploaded_image']は空として表示されます –

+0

logcat? – frz3993

+0

ログキャスト値 - D/thumbPath :: /storage/emulated/0/DCIM/Camera/1514221279211.jpg 12-25 22:31:24.491 9088-9248/com.pkg.myapp I/VideoActivity:サーバーの応答は次のとおりです。 OK:200 –

0

その後、JSONとしてPOSTリクエストを送信し、オブジェクトモデルに追加し、Gsonオブジェクトを使用してJSONにそれを解析:

Data data = new Data(); 
data.setImageUrl(imageUrl); 
data.setVideoUrl(videoUrl); 
String jsonObject = new Gson().toJson(data); 
// send the jsonObject to server here 
+0

....... thnxはサポートしていますが、私はjsonを必要としません。私は上記のコードでこのメソッドを使用します。 –

関連する問題