android端末→PHP→データベースでファイルをアップロードしようとしています。
PHPのフォームからのファイル送信が成功したのですが、Androidからファイルを送信しようとすると、下記のPHPエラーが起こります。
Notice Undifined index: upfile
uploadfile.php(アップロード先ファイル名) on line 9
ファイルが選択されていません。
接続に成功しました。
PHPフォームからファイルを送る単体テストは成功しているため、PHP受信側には問題ないと思うのですが・・・。
お詳しい方、お知恵を貸していただけないでしょうか。
コードは下記になります。
Android側ではテスト用ファイルが作成できていることを確認済みです。
<Android>
import java.io.File;
import java.io.IOException;
import android.os.AsyncTask;
import com.squareup.okhttp.FormEncodingBuilder;
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
;
/**
- Created by satomi on 15/10/10.
*/
public class OkHttpHandler extends AsyncTask<String, Void, String> {
public static final MediaType MEDIA_TYPE_CSV = MediaType.parse("text/csv; charset=utf-8"); OkHttpClient client = new OkHttpClient(); public OkHttpHandler(){ } @Override protected String doInBackground(String...params){ String filename = "GPS_log2.csv"; Request request = new Request.Builder() .url("http://example/php/uploadfile.php") .post(RequestBody.create(MEDIA_TYPE_CSV,filename)) .build(); try{ Response response = client.newCall(request).execute(); if(!response.isSuccessful()) throw new IOException("Unexpected code " + response.toString()); return response.body().string(); }catch(Exception e){ } return null; }
}
<PHP(サーバ受信側)>
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p><?phpif (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "/var/www/html/php/" . $_FILES["upfile"]["name"])) {
chmod("/var/www/html/php/" . $_FILES["upfile"]["name"], 0644);
echo $_FILES["upfile"]["name"] . "をアップロードしました。";
} else {
echo "ファイルをアップロードできません。";
}
} else {
echo "ファイルが選択されていません。";
}
try{
/**
* PDOのコンストラクタに指定する引数を正しく指定。
* また文字セットのutf8は、DSNで指定する。
* (文字セットをDSNで指定するやり方は、PHP5.3.5以前ではできません)
*/
$dbh = new PDO(
'mysql:dbname=GPS;host=tk2-218-18679.vs.sakura.ne.jp',
'root',
'',
array(
// 発生したエラーが例外としてスローされるよう指定
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_EMULATE_PREPARES => true
)
);
/** * PDOへの接続に失敗した場合、エラーを例外としてスロー(投げる) */ if (!$dbh) { throw new RuntimeException('接続に失敗しました。'); } echo '接続に成功しました。'; $sql = 'LOAD DATA LOCAL INFILE "/var/www/html/php/GPS_log2.csv" INTO TABLE test FIELDS TERMINATED BY "," LINES TERMINATED BY "\n";'; // ユーザ入力を伴わないため、PDO::queryメソッドを使用 $dbh->query($sql);
} catch (PDOException $e) {
/**
* PDOで発生した例外の処理
/
echo 'PDO Error: ' . $e->getMessage();
} catch (Exception $e) {
/*
* PDO以外で発生した例外の処理
*/
echo 'Error: ' . $e->getMessage();
}
?></p>
</body> </html>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。