【发布时间】:2020-05-13 21:55:04
【问题描述】:
我想从图库中选择一张图片并通过改造将其上传到服务器。 但是当我上传图片时返回的答案不成功,原因是:(没有这样的文件或目录) 我认为我的服务器代码也有问题,请检查并帮助我 这是我的代码:
我的 api 服务:
@Multipart
@POST("upload.php")
fun uploadImage(@Part filePart:MultipartBody.Part):Call<Message>
片段代码:
image.setOnClickListener {
var intent = Intent(Intent.ACTION_PICK)
intent.type = "image/*"
startActivityForResult(intent, 1001)
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == 1001 && resultCode == Activity.RESULT_OK) {
image.setImageURI(data!!.data)
var file = File(data!!.data!!.path)
var requestBody = RequestBody.create(MediaType.parse("image/jpeg"), file)
var filePart = MultipartBody.Part.createFormData("upload_file", file.name, requestBody)
viewModel.uploadImage(filePart).observe(this, Observer {
Toast.makeText(context, it.message, Toast.LENGTH_LONG).show()
})
}
}
和服务器代码:
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":"مشکل در آپلود فایل"}';
}
//}
}
【问题讨论】:
-
“没有这样的文件或目录” - 所以你在某处指定了错误的路径……去检查错误消息提到的文件和行号,检查你实际上是什么路径在那个地方使用,然后……更正它。
-
@04FS 我没有崩溃,这是上传失败错误
-
我不知道你想说什么。我假设 “并且原因是:(没有这样的文件或目录)” 您指的是实际的 PHP 错误消息,说明了这一点。如果不是这样 - 然后正确解释你在何时何地得到什么。
-
@04FS 此消息在上传后出现。我调试并看到调用了改造 onfailure 而不是 onsuccess。我在邮递员中尝试过,但没有成功。如果我使用 html 表单并尝试上传图像一切都很好,但是当清除 html 标签并使用邮递员时,它并不能真正工作
-
这应该是完整的消息吗?还是像 PHP 消息那样提及文件和行号?
标签: php android kotlin file-upload retrofit2