前提・実現したいこと
android端末からファイルをサーバ(PHP)にアップロードし、PHP側でアップロードファイルを受け取りそれを作成したディレクトリの中に入れる。
android端末からファイルをサーバ(PHP)にアップロードには成功しているのですが
ファイルが PHP によるサーバー側の受け口に送られていなく困っています。
発生している問題・エラーメッセージ
PHP側では Notice: Undefined index: uploaded_file in /var/www/html/UploadToServer.php on line 4 Notice: Undefined index: uploaded_file in /var/www/html/UploadToServer.php on line 5 エラーが発生しました。 というエラーがでており、 調べてみると(未定義の配列の要素を使用した時に出るエラー)と書かれていました。 android側のプログラムはエラーなく動作しています。
該当のソースコード
android側(MainActivity.java)
//androidにあるファイルをサーバにアップロードします public int uploadFile(final String selectedFilePath) { int serverResponseCode = 0; HttpURLConnection connection =null; DataOutputStream dataOutputStream =null;//アプリケーションはプリミティブ型のJavaデータを移植性のある形で出力ストリームに書き込むことができます。アプリケーションはデータ入力ストリームを使ってデータを読み戻すことができます。 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); //CSVデータをストリームに書き込みマス URL url = new URL(SERVER_URL); connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true);//入力を許可 connection.setDoOutput(true);//出力を許可する connection.setUseCaches(false);//キャッシュされたコピーを使用しないでください connection.setRequestMethod("POST"); connection.setRequestProperty("ENCTYPE", "multipart/form-data");//データをマルチパート形式で送信します(複数の種類のデータを持つ) connection.setRequestProperty("Connection", "Keep-Alive"); //コスト削減方法 connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);//ファイルの種類を表す情報が入ってるよ connection.setRequestProperty("uploaded_file", selectedFilePath); //新しいデータ出力ストリームの作成 dataOutputStream = new DataOutputStream(connection.getOutputStream()); //バイトをデータ出力ストリームに書き込む dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd); dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\"" + selectedFilePath + "\"" + lineEnd); dataOutputStream.writeBytes(lineEnd); dataOutputStream.flush(); //mizuno追項目 flush()強制的に書き込む //コンピューターでデータを一時的に記憶する場所 bytesAvailable = fileInputStream.available(); //バッファサイズを使用可能な最小バイトまたは1 MBとして選択 bufferSize = Math.min(bytesAvailable, maxBufferSize); // bufferSizeのサイズのバイト配列としてバッファを設定します buffer = new byte[bufferSize]; // FileInputStreamからバイトを読み取ります(バッファーの0番目のインデックスからbuffersizeまで) bytesRead = fileInputStream.read(buffer, 0, bufferSize); // bytesRead = -1になるまでループを繰り返します。つまり、読み取るバイトがなくなる while (bytesRead > 0) { //入力ストリームから読み取ったバイトを書き込みます 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); //get.ResponsCode() HTTP 応答メッセージから状態コードを取得します serverResponseCode = connection.getResponseCode(); String serverResponseMessage = connection.getResponseMessage(); Log.i(TAG, "Server Response is: " + serverResponseMessage + ": " + serverResponseCode); //応答コード200は、サーバーステータスがOK if (serverResponseCode == 200) { runOnUiThread(new Runnable() { @Override public void run() { tvFileName.setText("ファイルの Upload が成功しました.\n\n 送信先 \n\n" + "http://192.168.2.117/UploadToServer.php\n\n" + fileName); } }); } //入力ストリームと出力ストリームを閉じます 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; } } }
UploadToServer.php ?php $uploaded_file = isset($_FILES["uploaded_file"])?$_FILES["uploaded_file"]:NULL; $target_dir = '/savefiles'; $target_path = $target_dir.basename($_FILES['uploaded_file']['name']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'],$target_dir)) { echo " has been uploaded"; }else{ echo "エラーが発生しました。"; } ?>
試したこと
PHP側でエラーが出ているからうまくファイルが受け取れてないのか
それとも、Androidのプログラムの方が間違っているのか
とにかく送られていない原因が知りたい
補足情報(FW/ツールのバージョンなど)
Android studio
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー