我正在使用Retrofit
库将文件上传到php服务器,但发生了Unknow error
。
这是我的Android代码:
改造服务:
@Multipart
@POST("/upload_image.php")
public void uploadImage(@Part("file") TypedFile file, @Query("id_client") long id_client, @Query("id_obj") long id_obj, Callback<Boolean> callback);
上传代码:
public void uploadImage(String imagePath, long, clientId, Obj obj, Callback<Boolean> callback) {
TypedFile typedFile = new TypedFile("application/octet-stream", new File(imagePath));
mService.uploadImage(typedFile, clientId, obj.getId(), callback);
}
Php代码:
if(move_uploaded_file($_FILES["file"]["tmp_name"], $destination)){
echo ("Stored in".$_SERVER[DOCUMENT_ROOT]."/Uploader/UploadedFiles/".$_FILES["file"]["name"]);
} else {
$html_body = '<h1>File upload error!</h1>';
switch ($_FILES[0]['error']) {
case 1:
$html_body .= 'The file is bigger than this PHP installation allows';
break;
case 2:
$html_body .= 'The file is bigger than this form allows';
break;
case 3:
$html_body .= 'Only part of the file was uploaded';
break;
case 4:
$html_body .= 'No file was uploaded';
break;
default:
$html_body .= 'unknown errror';
}
echo ($html_body);
}
在图片上传时,服务器返回:“unknown errror”。
答案 0 :(得分:1)
这是因为您的开关默认为未知错误,而UPLOAD_ERR_OK的值为零
因此,您应该检查$_FILES['image']['error']
的值是否为0,如果是,请跳过此错误处理
实际上看起来move_uploaded_file失败了,但很难说不知道$destination
变量指向的是什么
但是你应该检查$ destination是否是要写入的有效文件,并且进程有权写入
同样作为一种良好的编码习惯,你不应该使用诸如1,2,3之类的魔法值。而是使用常量! UPLOAD_ERR_OK
,UPLOAD_ERR_NO_FILE
..
...
看起来你也尝试过使用表单并且可以正常使用
您应该检查设备中的TypedFile
是否指向现有文件
我正在以完全相同的方式使用改造,并且其工作完美
如果全部失败,我会尝试使用HTTP流量监控代理监控流量,例如 Charles
并查看文件是否实际发送
但我会说typedfile并没有指向有效的文件