Android: загрузка изображения на сервер PHP

Я написал сценарий для загрузки изображения, снятого с камеры на мой сервер. Я получаю ответ 200OK, но я не вижу свое изображение на своем сервере в uploads / folder:

Введите описание изображения здесь

Возможно, мой скрипт содержит ошибку. Не могли бы вы мне помочь, пожалуйста ?

Моим примером является следующая ссылка: http://androidexample.com/Upload_File_To_Server_-_Android_Example/index.php?view=article_discription&aid=83&aaid=106

Вот полный класс Android:

import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import android.app.ActionBar; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class New_annonce_act_step3 extends Activity { private static final int REQUEST_IMAGE = 100; TextView tvPath; TextView txtHaut; ImageView preview; File destination; String imagePath; ImageButton takePhoto; Button btnCreate; int serverResponseCode = 0; ProgressDialog dialog = null; String upLoadServerUri = null; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.nouvelle_annonce_step3); // Change color of action bar ActionBar bar = getActionBar(); bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#0099CC"))); preview = (ImageView) findViewById(R.id.nouvelle_annonce_step3_phototaken_preview); btnCreate = (Button) findViewById(R.id.nouvelle_annonce_step3_btn) ; txtHaut = (TextView) findViewById(R.id.nouvelle_annonce_step3_texteHaut); takePhoto = (ImageButton) findViewById(R.id.nouvelle_annonce_choose_image); preview.setVisibility(View.GONE); upLoadServerUri = "http://mywebsite.com/database/PDO/uploadFile.php"; String name = dateToString(new Date(),"yyyy-MM-dd-hh-mm-ss"); destination = new File(Environment.getExternalStorageDirectory(), name + ".jpg"); takePhoto.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(destination)); startActivityForResult(intent, REQUEST_IMAGE); } }); btnCreate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { dialog = ProgressDialog.show(New_annonce_act_step3.this, "", "Uploading file...", true); new Thread(new Runnable() { public void run() { uploadFile(imagePath); } }).start(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if( requestCode == REQUEST_IMAGE && resultCode == Activity.RESULT_OK ){ try { preview.setVisibility(View.VISIBLE); takePhoto.setVisibility(View.GONE); txtHaut.setText("Cette image est parfaite !"); FileInputStream in = new FileInputStream(destination); BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 10; imagePath = destination.getAbsolutePath(); Log.d("INFO", "PATH === " +imagePath); //tvPath.setText(imagePath); Bitmap bmp = BitmapFactory.decodeStream(in, null, options); preview.setImageBitmap(bmp); } catch (FileNotFoundException e) { e.printStackTrace(); } } else{ tvPath.setText("Request cancelled"); } } public String dateToString(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); return df.format(date); } public int uploadFile(String sourceFileUri) { String fileName = sourceFileUri; HttpURLConnection conn = null; DataOutputStream dos = null; String lineEnd = "\r\n"; String twoHyphens = "--"; String boundary = "*****"; int bytesRead, bytesAvailable, bufferSize; byte[] buffer; int maxBufferSize = 1 * 1024 * 1024; File sourceFile = new File(sourceFileUri); if (!sourceFile.isFile()) { dialog.dismiss(); Log.e("uploadFile", "Source File not exist :" +imagePath); return 0; } else { try { // open a URL connection to the Servlet FileInputStream fileInputStream = new FileInputStream(sourceFile); URL url = new URL(upLoadServerUri); // Open a HTTP connection to the URL conn = (HttpURLConnection) url.openConnection(); conn.setDoInput(true); // Allow Inputs conn.setDoOutput(true); // Allow Outputs conn.setUseCaches(false); // Don't use a Cached Copy conn.setRequestMethod("POST"); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("ENCTYPE", "multipart/form-data"); conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary); conn.setRequestProperty("uploaded_file", fileName); dos = new DataOutputStream(conn.getOutputStream()); dos.writeBytes(twoHyphens + boundary + lineEnd); dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename="+ fileName + "" + lineEnd); dos.writeBytes(lineEnd); // create a buffer of maximum size bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); buffer = new byte[bufferSize]; // read file and write it into form... bytesRead = fileInputStream.read(buffer, 0, bufferSize); while (bytesRead > 0) { dos.write(buffer, 0, bufferSize); bytesAvailable = fileInputStream.available(); bufferSize = Math.min(bytesAvailable, maxBufferSize); bytesRead = fileInputStream.read(buffer, 0, bufferSize); } // send multipart form data necesssary after file data... dos.writeBytes(lineEnd); dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd); // Responses from the server (code and message) serverResponseCode = conn.getResponseCode(); String serverResponseMessage = conn.getResponseMessage(); Log.i("uploadFile", "HTTP Response is : "+ serverResponseMessage + ": " + serverResponseCode); if(serverResponseCode == 200){ runOnUiThread(new Runnable() { public void run() { Toast.makeText(New_annonce_act_step3.this, "File Upload Complete.", Toast.LENGTH_SHORT).show(); } }); } //close the streams // fileInputStream.close(); dos.flush(); dos.close(); } catch (MalformedURLException ex) { dialog.dismiss(); ex.printStackTrace(); runOnUiThread(new Runnable() { public void run() { Toast.makeText(New_annonce_act_step3.this, "MalformedURLException", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server", "error: " + ex.getMessage(), ex); } catch (Exception e) { dialog.dismiss(); e.printStackTrace(); runOnUiThread(new Runnable() { public void run() { Toast.makeText(New_annonce_act_step3.this, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show(); } }); Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e); } dialog.dismiss(); return serverResponseCode; } // End else block } } 

И вот сценарий PHP:

 <?php $file_path = "uploads/"; $file_path = $file_path . basename( $_FILES['uploaded_file']['name']); if(move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $file_path)) { echo "success"; } else{ echo "fail"; } ?> 

Solutions Collecting From Web of "Android: загрузка изображения на сервер PHP"

Вы проверили, что пользовательский apache (или любой пользовательский php работает как) имеет разрешения на запись в каталог, указанный в $file_path ?

Поместите следующий код в тот же каталог, что и ваш PHP-скрипт, а затем посетите его в своем веб-браузере.

 <?php $file_path = 'uploads/'; $success = file_put_contents($file_path . "afile", "This is a test"); if($success === false) { echo "Couldn't write file"; } else { echo "Wrote $success bytes"; } ?> 

Получает ли это сообщение об успешном завершении или сообщение об ошибке?

Если он выдает сообщение об ошибке, попробуйте изменить права собственности на каталог uploads .