Php kotlin通过改装上传图像
我想从gallery中选择一个图像,并通过改装将其上载到服务器。 但当我上传图片时,返回的答案是不成功的,原因是:(没有这样的文件或目录) 我想我的服务器代码也有问题,请检查并帮助我 这是我的密码: 我的服务: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> 和服务器代码: 几个月前我遇到过同样的问题。不确定,但较新版本的
@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))
}
}