文件没有使用库Volley(android / php)上传到服务器


File does not upload to server using the library Volley( android/php)

告诉我,我发送到服务器的文本+文件。文件 - 照片。在清单中注册了必要的权限。

** 服务器

的文本接收 **,但服务器未收到文件。请帮我发送文件和文本。代码 php 网页运行良好,我从浏览器和文本 + 文件收到

更新:我考虑了所有评论和修改的代码,照片仍然无法到达服务器当我在图库中选择照片时,我在日志中看到我的标签

11-15 15:24:45.583 7942-7942/com.handlingcitizen.handlingcitizen E/GetpathImageGalery: Cool/storage/emulated/0/DCIM/Camera/20161113090426.jpg

钥匙:

   public static final String KEY_IMAGE = "fileFF";
public static final String KEY_IMAGE_NAME = "name";
public static final String KEY_NAME = "nameFF";
public static final String KEY_EMAIL = "contactFF";
public static final String KEY_NASELPUNKT = "gorodFF";
public static final String KEY_DOM = "homeFF";
public static final String KEY_STREET = "streetFF";
public static final String KEY_MESAGES = "messageFF";

上传文件:

 private void openGalery() {
    if (checker.lacksPermissions(PERMISSIONS_READ_STORAGE)) {
        startPermissionsActivity(PERMISSIONS_READ_STORAGE);
    } else {
        Intent galleryIntent = new Intent(Intent.ACTION_PICK,
                android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
        // Start the Intent
        startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST);
    }
}
private void opnenCamera() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    // Ensure that there's a camera activity to handle the intent
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        // Create the File where the photo should go
        File photoFile = null;
        try {
            photoFile = createImageFile();
        } catch (IOException ex) {
            // Error occurred while creating the File
            ex.printStackTrace();
        }
        // Continue only if the File was successfully created
        if (photoFile != null) {
            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(photoFile));
            startActivityForResult(takePictureIntent, CAPTURE_IMAGE);
        }
    }
}
private File createImageFile() throws IOException {
    // Create an image file name
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
    String imageFileName = timeStamp + "_";
    File storageDir = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_PICTURES);
    File image = File.createTempFile(
            imageFileName,  /* prefix */
            ".jpg",         /* suffix */
            storageDir      /* directory */
    );
    // Save a file: path for use with ACTION_VIEW intents
    mCurrentPhotoPath = image.getAbsolutePath();
    Log.e("Getpath", "Cool" + mCurrentPhotoPath);
    return image;
}

public String getPath(Uri uri) {
    String[] projection = {MediaStore.Images.Media.DATA};
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == PICK_IMAGE_REQUEST && data != null && requestCode == 1) {
        filePath = data.getData();
        try {
            int targetWi = imageViewUppload.getWidth();
            int targetHi = imageViewUppload.getHeight();
            BitmapFactory.Options bmOptionsgalery = new BitmapFactory.Options();
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
            //Setting the Bitmap to ImageView
            filename = filePath.getLastPathSegment();

            BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptionsgalery);
            int photoW = bmOptionsgalery.outWidth;
            int photoH = bmOptionsgalery.outHeight;
            int scaleFactor = Math.min(photoW / targetWi, photoH / targetHi);
            // Decode the image file into a Bitmap sized to fill the View
            bmOptionsgalery.inJustDecodeBounds = false;
            bmOptionsgalery.inSampleSize = scaleFactor;
            bmOptionsgalery.inPurgeable = true;
            Bitmap bitmaptoimge = BitmapFactory.decodeFile(getPath(filePath), bmOptionsgalery);
            Log.e("GetpathImageGalery", "Cool" + getPath(filePath));
            imageViewUppload.setImageBitmap(bitmaptoimge);
            Toast.makeText(MainActivity.this, "Фото сохранено и выбрано!",
                    Toast.LENGTH_LONG).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    if (requestCode == CAPTURE_IMAGE && resultCode == RESULT_OK) {

        // Get the dimensions of the View
        int targetW = imageViewUppload.getWidth();
        int targetH = imageViewUppload.getHeight();
        // Get the dimensions of the bitmap
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
        int photoW = bmOptions.outWidth;
        int photoH = bmOptions.outHeight;
        // Determine how much to scale down the image
        int scaleFactor = Math.min(photoW / targetW, photoH / targetH);
        // Decode the image file into a Bitmap sized to fill the View
        bmOptions.inJustDecodeBounds = false;
        bmOptions.inSampleSize = scaleFactor;
        bmOptions.inPurgeable = true;
        Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions);
        imageViewUppload.setImageBitmap(bitmap);
    } else {
        showError("Вы не выбрали файл");
    }

}

private void bottomnavigation(Bundle savedInstanceState) {
    bottomBar = BottomBar.attach(this, savedInstanceState);
    bottomBar.setItemsFromMenu(R.menu.bottomnavigationview, new OnMenuTabSelectedListener() {
        @Override
        public void onMenuItemSelected(int itemId) {
            switch (itemId) {
                case R.id.action_1:
                    opnenCamera();
                    break;
                case R.id.action_2:
                    openGalery();
                    break;
            }
        }
    });
}
public void showError(String errorMessage) {
    Toast.makeText(this, errorMessage, Toast.LENGTH_SHORT).show();
}

public void uploadImage() {
    if (checker.lacksPermissions(PERMISSIONS_INTERNET)) {
        startPermissionsActivity(PERMISSIONS_INTERNET);
    } else {
        //Showing the progress dialog
        final ProgressDialog loading =
                ProgressDialog.show(this, "Uploading...", "Please wait...", false, false);
        StringRequest stringRequest = new StringRequest(Request.Method.POST, UPLOAD_URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String s) {
                        //Disimissing the progress dialog
                        loading.dismiss();
                        //Showing toast message of the response
                        String otvet = null;
                        try {
                            otvet = URLDecoder
                                    .decode(URLEncoder.encode(s, "iso8859-1"), "UTF-8");
                        } catch (UnsupportedEncodingException e) {
                            e.printStackTrace();
                        }
                        Toast.makeText(MainActivity.this, otvet, Toast.LENGTH_LONG).show();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError volleyError) {
                //Dismissing the progress dialog
                loading.dismiss();
                //Showing toast
                String error = volleyError.toString();
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_LONG).show();
                if (volleyError.networkResponse == null) {
                    if (volleyError.getClass().equals(TimeoutError.class)) {
                        // Show timeout error message
                        Toast.makeText(MainActivity.this, "Oops. Timeout error!",
                                Toast.LENGTH_LONG).show();
                    }
                }
            }
        }) {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                //Getting Image Name
                name = nameFF.getText().toString().trim();
                //озвращает строку с вырезанными пробельными символами
                naselpunkt = naspunkt.getText().toString().trim();
                street = ulica.getText().toString().trim();
                house = dom.getText().toString().trim();
                e_mail = email.getText().toString().trim();
                message = mesages.getText().toString().trim();
                //Creating parameters
                Map<String, String> params = new Hashtable<String, String>();
                //Adding parameters
                params.put(KEY_IMAGE, getPath(filePath));
                params.put(KEY_NAME, name);
                params.put(KEY_NASELPUNKT, naselpunkt);
                params.put(KEY_STREET, street);
                params.put(KEY_DOM, house);
                params.put(KEY_EMAIL, e_mail);
                params.put(KEY_MESAGES, message);
                //returning parameters
                return params;
            }
        };
        //Creating a Request Queue
        RequestQueue requestQueue = Volley.newRequestQueue(this);
        //Adding request to the queue
        requestQueue.add(stringRequest);
    }
}

PHP代码:

 <?php
if (isset ($_POST['contactFF'])) {
  $to = "ukpmo"; // поменять на свой электронный адрес
  $from = $_POST['contactFF'];
  $subject = "Заполнена контактная форма с ".$_SERVER['HTTP_REFERER'];
  $message = "Фамилия, собственное имя, отчество (если таковое имеется) либо инициалы гражданина: 'n".$_POST['nameFF'].
  "'nНаселенный пункт: ".$_POST['gorodFF'].
  "'nУлица: ".$_POST['streetFF'].
  "'nдом, квартира/офис: ".$_POST['homeFF'].
  "'nEmail: ".$from.
  "'nДата отправки сообщения: ".$date_today = date("d.m.Y H:i").
  "'nИзложение сути обращения: ".$_POST['messageFF'];
  $boundary = md5(date('r', time()));
  $filesize = '';
  $headers = "MIME-Version: 1.0'r'n";
  $headers .= "From: " . $from . "'r'n";
  $headers .= "Reply-To: " . $from . "'r'n";
  $headers .= "Content-Type: multipart/mixed; boundary='"$boundary'"'r'n";
  $message="
Content-Type: multipart/mixed; boundary='"$boundary'"
--$boundary
Content-Type: text/plain; charset='"utf-8'"
Content-Transfer-Encoding: 7bit
$message";
  for($i=0;$i<count($_FILES['fileFF']['name']);$i++) {
     if(is_uploaded_file($_FILES['fileFF']['tmp_name'][$i])) {
         $attachment = chunk_split(base64_encode(file_get_contents($_FILES['fileFF']['tmp_name'][$i])));
         $filename = $_FILES['fileFF']['name'][$i];
         $filetype = $_FILES['fileFF']['type'][$i];
         $filesize += $_FILES['fileFF']['size'][$i];
         $message.="
--$boundary
Content-Type: '"$filetype'"; name='"$filename'"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename='"$filename'"
$attachment";
     }
   }
   $message.="
--$boundary--";
  if ($filesize < 10000000) { // проверка на общий размер всех файлов. Многие почтовые сервисы не принимают вложения больше 10 МБ
    mail($to, $subject, $message, $headers);
    echo $_POST['nameFF'].', Ваше сообщение получено, спасибо!';
  } else {
    echo 'Извините, письмо не отправлено. Размер всех файлов превышает 10 МБ.';
  }
}
?>

通过浏览器上传代码和文本:

    Request URL:http://dfg.by/wp-content/themes/reverie-master/contacts.php
Request Method:POST
Status Code:200 OK
Remote Address:148.114.138.185:80
Response Headers
view parsed
HTTP/1.1 200 OK
Date: Thu, 03 Nov 2016 17:39:00 GMT
Server: Apache
X-Powered-By: PHP/5.4.45
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html
Request Headers
view parsed
POST /wp-content/themes/reverie-master/contacts.php HTTP/1.1
Host: ukp.mogilev.by
Connection: keep-alive
Content-Length: 47014
Origin: http://ukp.mogilev.by
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.87 Safari/537.36
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryLgacUgprclABmklr
Accept: */*
DNT: 1
Referer: http://ukp.mogilev.by/elektronnye-obrashcheniya-grazhdan/
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cookie: _ym_uid=1478194399500303049; _ym_isad=1; _ym_visorc_28369546=w
Request Payload
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="nameFF"
тест
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="gorodFF"
тест
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="streetFF"
тест
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="streetFF"
тест
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="streetFF"
q@tut.by
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="messageFF"
тест
------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="fileFF[]"; filename="3.jpg"
Content-Type: image/jpeg

------WebKitFormBoundaryLgacUgprclABmklr
Content-Disposition: form-data; name="fileFF[]"; filename=""
Content-Type: application/octet-stream

------WebKitFormBoundaryLgacUgprclABmklr--
params.put(KEY_IMAGE, image); 

params.put("fileFF", image);

在您的情况下是

params.put("fileFF", a base64 encoded string containing an image);

因此,您不是以通常的方式发送文件,而只是发送 POST 参数。

在你的php schript中,你可以用以下命令获取文件的内容:

$image = base64_decode($_POST['fileFF']);