我无法理解如何通过POST数据将图像文件从android设备上传到Laravel API,我已经使用android-asynchronous-http-client将一些文本数据发送到API,但它不适用于Image文件。 API端工作正常,我使用POSTMAN进行了测试,但在android设备status code: 500 Internal Server Error
上给出了错误
ANDROID PART
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(); } });
ImageEvidence
是在Uri
中使用的imageView.setImageURI(ImageEvidence)
类型变量,evidenceID
只是图像文件的名称。
LARAVEL API PART
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') ]);
请告诉我应该使用哪个库来发送图像文件和POST数据。
我无法理解如何通过POST数据将图像文件从android设备上传到Laravel API,我已经在使用android-asynchronous-http-client向API发送一些文本数据,但是它......
我通过一个非常简单的快捷方式解决了我的问题