Невозможно загрузить изображение, щелкнутое с камеры на сервер - PullRequest
2 голосов
/ 08 ноября 2019

Я пытаюсь загрузить изображение на сервер после щелчка с камеры, но сервер возвращает

($ _ File) JSON Response после щелчка по изображению с сервера и загрузки

{
   "data":78,
   "status":true,
   "files":
   {
      "photo": 
      {
         "name":"IMG_20191108_115642_5386652903586463966.jpg",
         "type":"",
         "tmp_name":"",
         "error":1,
         "size":0
      }
    }
  }

($ _ File) JSON Ответ после выбора изображения из галереи и загрузки

    {
     "data":79,
     "status":true,
     "files":
         {
           "photo": 
              {
               "name":"Screenshot_20191108_081937_com.instagram.android.jpg",
               "type":"*\/*",
               "tmp_name":"C:\\xampp\\tmp\\php50A6.tmp",
               "error":0,
               "size":518164
              }
         }
   }


     override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_pharmacy)
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
            PackageManager.PERMISSION_GRANTED &&
            ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) !=
            PackageManager.PERMISSION_GRANTED
        ) {
            ActivityCompat.requestPermissions(this, permission, REQUEST_PERMISSION)
        }
    next.setOnClickListener {

            if (prescriptionid == "") {
                Toast.makeText(
                    applicationContext,
                    "Select/Upload Prescription First",
                    Toast.LENGTH_LONG
                ).show()
            } else {
                intent = Intent(applicationContext, SelectAddressActivity::class.java)
                imageFilePath = ""
                imageView.setImageResource(R.drawable.ic_image)
                imagedisplay.visibility = View.GONE
                startActivity(intent)
            }
        }

        if (imageFilePath == "") {
            imagedisplay.visibility = View.GONE
        } else {
            imagedisplay.visibility = View.GONE
        }
     }

Назначение камеры

private fun openCameraIntent() {
        val pictureIntent = Intent(
            MediaStore.ACTION_IMAGE_CAPTURE)
        if (pictureIntent.resolveActivity(getPackageManager()) != null)
        {
            try
            {
                photoFile = createImageFile()
            }
            catch (ex:IOException) {}// Error occurred while creating the File
            if (photoFile != null)
            {
                val photoURI = FileProvider.getUriForFile(this, packageName+".provider", photoFile)
                pictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoURI)
                startActivityForResult(pictureIntent,CAMERA_REQUEST_CODE)
            }
        }
    }

GalleryIntent

private fun pickFromGallery() {
        //Create an Intent with action as ACTION_PICK
        val intent = Intent(Intent.ACTION_PICK)
        // Sets the type as image/*. This ensures only components of type image are selected
        intent.type = "image/*"
        //We pass an extra array with the accepted mime types. This will ensure only components with these MIME types as targeted.
        val mimeTypes = arrayOf("image/jpeg", "image/png")
        intent.putExtra(Intent.EXTRA_MIME_TYPES, mimeTypes)
        // Launching the Intent
        startActivityForResult(intent, GALLERY_REQUEST_CODE)
    }
 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        imagedisplay.visibility = View.VISIBLE
        when (requestCode) {
            CAMERA_REQUEST_CODE -> {
                if (resultCode == Activity.RESULT_OK) {
                    correct.visibility = View.VISIBLE
                    imageView.setImageBitmap(setScaledBitmap())
                }
            }
           GALLERY_REQUEST_CODE -> {
                //data.getData returns the content URI for the selected Image
                if (resultCode == Activity.RESULT_OK) {
                    correct.visibility = View.VISIBLE
                    var selectedImage = data!!.data as Uri
                    var filePathColumn = arrayOf(MediaStore.Images.Media.DATA)
                    // Get the cursor
                    var cursor = getContentResolver().query(
                        selectedImage,
                        filePathColumn, null, null, null
                    );
                    // Move to first row
                    cursor!!.moveToFirst();
                    //Get the column index of MediaStore.Images.Media.DATA
                    var columnIndex = cursor.getColumnIndex(filePathColumn[0])
                    //Gets the String value in the column
                    var imgDecodableString = cursor.getString(columnIndex)
                    cursor.close()
                    // Set the Image in ImageView after decoding the String
                    Log.i("filepath", imgDecodableString)
                    imageFilePath = imgDecodableString
                    imageView.setImageBitmap(BitmapFactory.decodeFile(imgDecodableString))

                }
            }
            else -> {
                Toast.makeText(this, "Unrecognized request code", Toast.LENGTH_SHORT).show()
            }
        }
    }

Код для создания файла изображения


    @Throws(IOException::class)
    private fun createImageFile(): File {
        // Create an image file name
        val timeStamp: String = SimpleDateFormat("yyyyMMdd_HHmmss").format(Date())
        val storageDir: File = getExternalFilesDir(Environment.DIRECTORY_PICTURES) as File
        return File.createTempFile(
            "IMG_${timeStamp}_", /* prefix */
            ".jpg", /* suffix */
            storageDir /* directory */
        ).apply {
            // Save a file: path for use with ACTION_VIEW intents
            imageFilePath = absolutePath
        }
    }

Код для загрузки изображения на сервер


       val file = File(imageFilePath)
       //creating request body for file
       var requestBody = file.asRequestBody("*/*".toMediaTypeOrNull())
//        val requestFile = file.asRequestBody("*/*".toMediaTypeOrNull())
       var photo = MultipartBody.Part.createFormData("photo", file.name, requestBody)
//        RequestBody descBody = RequestBody.create(MediaType.parse("text/plain"), desc);
       Log.e("requestFile", imageFilePath)

       val uploadImage =
           RetrofitCall.provideRetrofit().create(uploadPrescriptionApi::class.java)

       uploadImage.uploadPrescription("Bearer ".plus(sharedPreference!!.token.toString()), photo)
           .enqueue(object : Callback<UploadPhototPOJO> {
               override fun onResponse(
                   call: Call<UploadPhototPOJO>,
                   response: Response<UploadPhototPOJO>
               ) {
                   if (response.body()!!.status!!) {
                       progressDialog!!.dismiss()
                       prescriptionid = response.body()!!.id.toString()
                       Log.i("id", prescriptionid.toString())
                   } else {
                       Toast.makeText(
                           applicationContext,
                           "Oops Something Went Wrong!! Try again",
                           Toast.LENGTH_LONG
                       ).show()
                       progressDialog!!.dismiss()
                   }
               }

               override fun onFailure(call: Call<UploadPhototPOJO>, t: Throwable) {
                   // handle execution failures like no internet connectivity
                   Log.i("Faliure", t.toString())
               }
           })

   }

1 Ответ

1 голос
/ 10 ноября 2019

Максимально допустимый размер для загрузки файлов составляет 2 МБ. Как вы упомянули в своем комментарии , размер загружаемой фотографии составляет 4 МБ.

Если вы хотите загружать файлы, размер которых превышает установленный размер, просто откройте файл php.ini, чтобы увеличитьsize.

Откройте файл C:/xampp/php/php.ini в любом из ваших любимых текстовых редакторов. Найдите upload_max_filesize и измените его размер. Например, 50 МБ

upload_max_filesize = 50M    

А также максимальный размер POST-данных, которые принимает PHP, составляет 8 МБ. Если вы хотите расширить его, найдите post_max_size и увеличьте размер.

Наконец, не забудьте перезапустить сервер Apache.

...