Я создаю PHP-скрипт для Android-загрузчика. Но я не могу загрузить файл csv
из локальной папки Android.
PHP sclipt может работать один.
Ошибка Undefined index: upfile в /example/html/php/uploadfile.php online 9
не выбирать файл
public class MainActivity extends Activity {
TextView outputText;
Button sendData;
EditText edtUser, edtPass;
final String URL = "http://example/php/uploadfile.php";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
outputText = (TextView) findViewById(R.id.textView1);
outputText.setMovementMethod(new ScrollingMovementMethod());
sendData = (Button) findViewById(R.id.button1);
edtUser = (EditText) findViewById(R.id.editText1);
edtPass = (EditText) findViewById(R.id.editText2);
String Text = "Tue Oct 06 18:56:24 JST 2015,Tue Oct 06 18:57:12 JST 2015,35.4708118,139.6251623\n";
try {
OutputStream out = openFileOutput("GPS_log2.csv", MODE_APPEND);
PrintWriter writer =
new PrintWriter(new OutputStreamWriter(out, "UTF-8"));
writer.append(Text);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
sendData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
OkHttpHandler handler = new OkHttpHandler();
String result = null;
try {
result = handler.execute(URL).get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
outputText.append(result + "\n");
}
});
}
}
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";
Log.d("doInBackground", "start");
Request request = new Request.Builder()
.url("http://160.16.84.183/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){
e.printStackTrace();
Log.d("Response ",e.getMessage());
}
return null;
}
if (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"] . "file uploaded";
} else {
echo "cannot file upload";
}
} else {
echo "do not choice file";
}
aine , you are trying to write file at /var/www/html/php/. it is not best practice to write files this location . Move your loaction of script to /home and change the path from etc/apache/siteenabled . For more details
http://askubuntu.com/questions/379412/how-to-redirect-apache-var-www-to-the-home-directory-and-access-all-the-directo
For your PHP code must be as follows
public static function processRequest()
{
case 'post':
if(move_uploaded_file($_FILES["uploaded_file"]["tmp_name"] , "Images/" . $_FILES["uploaded_file"]["name"] )){
echo "move_uploaded_file SUCCESS ";
......................................
}
......................................
protected function executePost ($ch)
{
$tmpfile = $_FILES['image1']['tmp_name'];
$filename = basename($_FILES['image1']['name']);
$data = array(
'uploaded_file' => '@' . $tmpfile . ';filename='.$filename,
);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//no need httpheaders
$this->doExecute($ch);
}
Согласно вашему PHP-фрагменту, кажется, что все в порядке. Но проблема заключается в вашем коде Android, потому что когда вы загружаете данные на сервер, ваш запрос становится многопрофильным, и ваш не упоминает об атрибуте upfile в запросе, как сервер получит это значение, если ваш клиент не отправит форму. Основная проблема, которую я понимаю, - это отправить многостраничный запрос вместо обычного запроса.
Для получения дополнительной информации о том, как создать запрос Multipart, нажмите здесь
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("upfile", file.getName(),
RequestBody.create(MediaType.parse("text/csv"), file))
.addFormDataPart("field", "value")
.build();
Request request = new Request.Builder()
.url(serverURL)
.post(requestBody)
.build();