Php kotlin通过改装上传图像

Php kotlin通过改装上传图像,php,android,kotlin,file-upload,retrofit2,Php,Android,Kotlin,File Upload,Retrofit2,我想从gallery中选择一个图像,并通过改装将其上载到服务器。 但当我上传图片时,返回的答案是不成功的,原因是:(没有这样的文件或目录) 我想我的服务器代码也有问题,请检查并帮助我 这是我的密码: 我的服务: @Multipart @POST("upload.php") fun uploadImage(@Part filePart:MultipartBody.Part):Call<Message> 和服务器代码: 几个月前我遇到过同样的问题。不确定,但较新版本的

我想从gallery中选择一个图像,并通过改装将其上载到服务器。 但当我上传图片时,返回的答案是不成功的,原因是:(没有这样的文件或目录) 我想我的服务器代码也有问题,请检查并帮助我 这是我的密码:

我的服务:

@Multipart
    @POST("upload.php")
    fun uploadImage(@Part filePart:MultipartBody.Part):Call<Message>
和服务器代码:


几个月前我遇到过同样的问题。不确定,但较新版本的Android不会为您提供所选图像的路径。尝试以ByteArray的形式发送所选图像,看看它是否适合您。下面是一个你可以理解的片段

将“image”替换为作为表单数据传递的参数值。还应将filePartImage的类型设置为MultipartBody.Part。然后在api调用中将此filePartImage变量作为参数发送。希望它对你有用

if (requestCode == UPLOAD_IMAGE && resultCode == RESULT_OK) {
        if (data != null) {

            val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, data.data)
            product_iv.setImageBitmap(bitmap)

            val imageType = contentResolver.getType(data.data!!)

            val extension = imageType!!.substring(imageType.indexOf("/") + 1)

            data.data!!.let {
                application.contentResolver.openInputStream(it)?.use { inputStream ->
                    filePartImage = MultipartBody.Part.createFormData(
                        "image",
                        "image.$extension",
                        inputStream.readBytes().toRequestBody("*/*".toMediaType())
                    )
                }
            }
            showMessage(this, "" + getString(R.string.image_uploaded))
        } else {
            showMessage(this, "" + getString(R.string.image_failed))
        }
    }

“没有这样的文件或目录”-所以你在某个地方指定了一个错误的路径…去检查错误消息提到的文件和行号,检查你在那个地方实际使用的路径,然后…更正它。@04FS我没有崩溃,这是上传失败错误我不知道你想说什么。我假设“原因是:(没有这样的文件或目录)”您指的是一条实际的PHP错误消息。如果不是这样,请正确解释您在何时何地获得的信息。@04FS此消息在上载后出现。我调试并看到改型onfailure调用,而不是onsuccess。我在postman中尝试过,但没有成功。如果我使用html表单并尝试上载图像,一切都正常,但当清除html标记并使用postman时,一切都不起作用真的,这应该是全部信息吗?还是像PHP消息那样提到文件和行号?
define ('SITE_ROOT', realpath(dirname(__FILE__)));
//if(isset($_FILES['upload_file'])) {

    $target_dir = "/uploads/";
    $target_file = $target_dir . microtime().rand(99999,999999).basename($_FILES["upload_file"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["upload_file"]["tmp_name"]);
        if($check !== false) {
            $uploadOk = 1;
        } else {
            echo '{"status":"error","message":"فایل معتبر نیست"}';
            $uploadOk = 0;
        }
    }


// Check file size
    if ($_FILES["upload_file"]["size"] > 500000) {
        echo '{"status":"error","message":"حجم عکس نباید بیشتر از 500 کیلوبایت باشد"}';
        $uploadOk = 0;
    }
// Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
         ) {
        echo '{"status":"error","message":"فرمت عکس اشتباه است"}';
        $uploadOk = 0;
    }
// Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo '{"status":"error","message":"متاسفانه عکس آپلود نشد"}';
// if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["upload_file"]["tmp_name"], SITE_ROOT.$target_file)) {
            echo '{"status":"success","message":"عکس با موفقیت آپلود شد"}';
        } else {
            echo '{"status":"error","message":"مشکل در آپلود فایل"}';
        }
    //}
}
if (requestCode == UPLOAD_IMAGE && resultCode == RESULT_OK) {
        if (data != null) {

            val bitmap = MediaStore.Images.Media.getBitmap(this.contentResolver, data.data)
            product_iv.setImageBitmap(bitmap)

            val imageType = contentResolver.getType(data.data!!)

            val extension = imageType!!.substring(imageType.indexOf("/") + 1)

            data.data!!.let {
                application.contentResolver.openInputStream(it)?.use { inputStream ->
                    filePartImage = MultipartBody.Part.createFormData(
                        "image",
                        "image.$extension",
                        inputStream.readBytes().toRequestBody("*/*".toMediaType())
                    )
                }
            }
            showMessage(this, "" + getString(R.string.image_uploaded))
        } else {
            showMessage(this, "" + getString(R.string.image_failed))
        }
    }