[英]Upload image file to laravel api from android
I am not able to understand how could I upload image file from my android device to Laravel API with POST data, I am already sending some text data to API using android-asynchronous-http-client but it's not working with Image files. I am not able to understand how could I upload image file from my android device to Laravel API with POST data, I am already sending some text data to API using android-asynchronous-http-client but it's not working with Image files. The API end works fine I tested it using POSTMAN but gives error on android device
status code: 500 Internal Server Error
API 端工作正常我使用 POSTMAN 对其进行了测试,但在 android 设备
status code: 500 Internal Server Error
ANDROID PART ANDROID零件
RequestParams ComplaintsDataRequestParams = new RequestParams();
ComplaintsDataRequestParams.put("Complaint_Subject", complaintsSubject.getText().toString());
ComplaintsDataRequestParams.put("Complaint_Details", complaintsDetails.getText().toString());
ComplaintsDataRequestParams.put("Complaint_Address", complaintAddress.getText().toString());
ComplaintsDataRequestParams.put("Username", HomeActivity.home_username);
ComplaintsDataRequestParams.put("Complainant_CNIC", HomeActivity.user_cnic);
ComplaintsDataRequestParams.put("Complaint_id", uniqueComplaintID);
ComplaintsDataRequestParams.put("User_Location", user_complete_address + "-" + lat + "," + lng);
if (ImageEvidence1 != null) {
evidenceID1 = uniqueComplaintID + "-" + System.currentTimeMillis();
ComplaintsDataRequestParams.put("Evidence_ID1", "YES");
ComplaintsDataRequestParams.put("Evidence_ID1_name", evidenceID1);
ComplaintsDataRequestParams.put("Evidence_ID1_data", ImageEvidence1);
}
if (ImageEvidence2 != null) {
evidenceID2 = uniqueComplaintID + "-" + System.currentTimeMillis();
ComplaintsDataRequestParams.put("Evidence_ID2", "YES");
ComplaintsDataRequestParams.put("Evidence_ID2_name", evidenceID2);
ComplaintsDataRequestParams.put("Evidence_ID2_data", ImageEvidence2);
}
if (ImageEvidence3 != null) {
evidenceID3 = uniqueComplaintID + "-" + System.currentTimeMillis();
ComplaintsDataRequestParams.put("Evidence_ID3", "YES");
ComplaintsDataRequestParams.put("Evidence_ID3_name", evidenceID3);
ComplaintsDataRequestParams.put("Evidence_ID3_data", ImageEvidence3);
}
Complaints_REST_API_Client.POST("?action=store", ComplaintsDataRequestParams, new AsyncHttpResponseHandler() {
@Override
public void onSuccess(int statusCode, Header[] headers, byte[] response) {
// called when response HTTP status is "200 OK"
complaint_confirmation();
Log.d("newComplaintActivity", "statusCode " + statusCode);
}
@Override
public void onFailure(int statusCode, Header[] headers, byte[] errorResponse, Throwable error) {
// called when response HTTP status is "4XX" (eg. 401, 403, 404)
submittingComplaint.dismiss();
Log.d("newComplaintActivity", "statusCode " + statusCode);
Toast.makeText(getContext(), "Exception: " + error.getMessage(), Toast.LENGTH_SHORT).show();
}
});
The ImageEvidence
is a Uri
type variable which is used in imageView.setImageURI(ImageEvidence)
and evidenceID
are just the names for image files. ImageEvidence
是一个Uri
类型变量,用于imageView.setImageURI(ImageEvidence)
和evidenceID
只是图像文件的名称。
LARAVEL API PART LARAVEL API 零件
Complaint::create([
'title' => $request->input('Complaint_Subject'),
'description' => $request->input('Complaint_Details'),
'address' => $request->input('Complaint_Address'),
'firebase_user_id' => $request->input('Username'),
'firebase_user_cnic' => $request->input('Complainant_CNIC'),
'firebase_complaint_id' => $request->input('Complaint_id'),
'firebase_user_location' => $request->input('User_Location'),
'status' => 'pending'
]);
if ($request->input('Evidence_ID1') == "YES")
Evidence::create([
'evidence_name' => $request->input('Evidence_ID1_name'),
'eivdence_image' => $request->file('Evidence_ID1_data')->store('public/evidences'),
'complaint_id' => $request->input('Complaint_id')
]);
if ($request->input('Evidence_ID2') == "YES")
Evidence::create([
'evidence_name' => $request->input('Evidence_ID2_name'),
'eivdence_image' => $request->file('Evidence_ID2_data')->store('public/evidences'),
'complaint_id' => $request->input('Complaint_id')
]);
if ($request->input('Evidence_ID3') == "YES")
Evidence::create([
'evidence_name' => $request->input('Evidence_ID3_name'),
'eivdence_image' => $request->file('Evidence_ID3_data')->store('public/evidences'),
'complaint_id' => $request->input('Complaint_id')
]);
Please tell me which library should I use to send Image file along with POST data.请告诉我应该使用哪个库来发送图像文件和 POST 数据。
I solved my problem by a very simple shortcut method我通过一个非常简单的快捷方法解决了我的问题
as I were requesting file at API end but I was sending Uri ie ImageEvidence1
.因为我在 API 端请求文件,但我发送的是 Uri 即
ImageEvidence1
。 So the simple hack was that I got the absolute path of URI and put it into file and then所以简单的破解是我得到了 URI 的绝对路径并将其放入文件中,然后
File file = new File(new URI(ImageEvidence1.getPath()));
ComplaintsDataRequestParams.put("Evidence_ID3_data", file);
So this was it.就是这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.