【问题标题】:Can't send image to server with Retrofit无法使用 Retrofit 将图像发送到服务器
【发布时间】:2015-07-27 02:22:45
【问题描述】:

我正在使用 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);
}

图片上传时,服务器返回:“未知错误”。

【问题讨论】:

    标签: php android retrofit


    【解决方案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 没有指向一个有效的文件

    【讨论】:

    • 我用 html 表单进行了测试,它可以工作。使用改造,它不起作用
    • 我已启用日志进行改造,我可以看到文件已发送。 file.exists() 返回 true...
    • 在你使用 $_FILES[0] 和其他地方 $_FILES['file'] 的 switch 语句中,它们是否需要同一个文件?如果表单有效,您应该比较应用程序和网页的请求,看看有什么不同并根据差异进行修改
    • 好吧,我试试。你能告诉我你的代码吗?
    • 好的,我运行测试没有错误,但是服务器上没有图像!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 2017-01-14
    • 2017-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 1970-01-01
    相关资源
    最近更新 更多