[英]cant get request body sent from retrofit in php
I'm trying to send multiple image to server using retrofit what i'am doing is to send a map of RequestBody and this is my code 我正在尝试使用改造将多个图像发送到服务器,我正在做的是发送RequestBody的映射,这是我的代码
@Multipart
@POST("imageuload")
Call<ResponseBody> postImage(@PartMap Map<String, RequestBody> files );
and in my activity 在我的活动中
Map<String, RequestBody> filestosend = new HashMap<>();
for (int pos = 0; pos < files.size(); pos++) {
RequestBody requestBody = RequestBody.create(MediaType.parse("image/*"), files.get(pos));
filestosend.put("photo_" + String.valueOf(pos + 1), requestBody);
}
Call<ResponseBody> call = apiSerice.postImage(filestosend);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (response.isSuccessful()) {
try {
Toast.makeText(getBaseContext(),response.body().string(),Toast.LENGTH_LONG).show();
} catch (IOException e) {
e.printStackTrace();
}
}else {
try {
AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);
alert.setMessage(response.errorBody().string());
alert.show();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
t.printStackTrace();
}
});
and when i want to test for what i'am getting it return an empty respons from server and i get nothing in my response .. 当我想测试我得到的东西时,从服务器返回一个空响应,而我的响应中什么也没有。
echo file_get_contents('php://input');
i even tested with a single request body 我什至用一个请求正文进行了测试
RequestBody test = RequestBody.create(MediaType.parse("text/plain"), "test");
Call<ResponseBody> call = apiSerice.postImage(test);
but i am still getting an empty response in my on response i will appreciate any help or comment 但我仍会在回应中得到空洞的回应,我将不胜感激任何帮助或评论
Multipart uploads can be accessed in PHP through $_FILES
. 可以通过$_FILES
在PHP中访问分段上传。 The PHP manual has the following to say regarding php://input
: 关于php://input
, PHP手册有以下说法:
php://input is not available with enctype="multipart/form-data". php:// input不能与enctype =“ multipart / form-data”一起使用。
A full working example (minus correct endpoint URL, hard coded byte arrays): 完整的工作示例(减去正确的端点URL,硬编码字节数组):
public class Sample {
interface SampleService {
@Multipart
@POST("/test.php")
Call<ResponseBody> postImage(@Part List<MultipartBody.Part> files);
}
public static void main(String[] args) throws IOException {
Retrofit retrofit = new Retrofit.Builder().baseUrl("http://...").build();
SampleService service = retrofit.create(SampleService.class);
RequestBody file1 = RequestBody.create(MediaType.parse("image/jpeg"), new byte[]{0x00});
MultipartBody.Part part1 = MultipartBody.Part.createFormData("A kitten", "Kitten.jpg", file1);
RequestBody file2 = RequestBody.create(MediaType.parse("image/jpeg"), new byte[]{0x00});
MultipartBody.Part part2 = MultipartBody.Part.createFormData("Another kitten", "Kitten2.jpg", file2);
System.out.println(service.postImage(Arrays.asList(part1, part2)).execute().body().string());
}
}
Server code: 服务器代码:
<?php var_dump($_FILES); ?>
Output from client: 客户的输出:
array(2) {
["A_kitten"]=>
array(5) {
["name"]=>
string(10) "Kitten.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(14) "/tmp/phpml5PIP"
["error"]=>
int(0)
["size"]=>
int(1)
}
["Another_kitten"]=>
array(5) {
["name"]=>
string(11) "Kitten2.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(14) "/tmp/phpzhgXm0"
["error"]=>
int(0)
["size"]=>
int(1)
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.