I'm unable to upload audio file and some string to server. I'm using Retrofit 2.0 . i'm getting "Not Save" response as you can see on last else of php api .Please check below code.
PHP API CODE:
<?php
header('Content-Type: application/json');
if(isset($_FILES['file']) && isset($_POST['section']) && isset($_POST['sub_category']) && isset($_POST['question']) && isset($_POST['optionA']) && isset($_POST['optionB']) && isset($_POST['optionC']) && isset($_POST['optionD']) && isset($_POST['answer']) ){
//require database
require_once('DbConnect.php');
$output=array();
$section=$_POST['section'];
$sub_category=$_POST['sub_category'];
$question=$_POST['question'];
$optA=$_POST['optionA'];
$optB=$_POST['optionB'];
$optC=$_POST['optionC'];
$optD=$_POST['optionD'];
$an=$_POST['answer'];
$ans=(int)$an;
$output['error'] = false;
$output['message'] = "File Uploaded Succesfully";
$p=dirname(__FILE__);
//echo $p;
$audio=basename($_FILES['file']['name']);
$size=$_FILES['file']['size'];
//echo $audio;
$audio=str_replace(' ','|',$audio);
$tmppath1=$_SERVER['DOCUMENT_ROOT'].'/upload/'.$audio;
if(move_uploaded_file($_FILES['file']['tmp_name'],$tmppath1)){
$conn=$dbh->prepare('INSERT INTO toefl(section,sub_category,question,optionA,optionB,optionC,optionD,answer,file_url) VALUES (?,?,?,?,?,?,?,?,?)');
$conn->bindParam(1,$section);
$conn->bindParam(2,$sub_category);
$conn->bindParam(3,$question);
$conn->bindParam(4,$optA);
$conn->bindParam(5,$optB);
$conn->bindParam(6,$optC);
$conn->bindParam(7,$optD);
$conn->bindParam(8,$ans);
$conn->bindParam(9,$tmppath1);
$conn->execute();
if($conn->rowCount() ==0){
$output['error'] = true;
$output['message'] = "File not save in db ";
}
elseif($conn->rowCount() !==0){
$output['error'] = false;
$output['message'] = "Question Uploaded Succefully ";
}
}else{
$output['error'] = true;
$output['message'] = "FIle Not Uploaded ";
}
}
else{
$output['error'] = true;
$output['message'] = "Not Sent";
}
echo json_encode($output);
?>
Android Retrofit Code:
public interface FileUploadService {
@Headers({"Content-Type: multipart/form-data",
"Accept: application/json"})
@Multipart
@POST("quizappdb/uploadlistening.php")
Call<MyResponse> upload(
@Part MultipartBody.Part file,
@Part("section") RequestBody section,
@Part("sub_category") RequestBody sub_category,
@Part("question") RequestBody ques,
@Part("optionA") RequestBody optA,
@Part("optionB") RequestBody optB,
@Part("optionC") RequestBody optC,
@Part("optionD") RequestBody optD,
@Part("answer") RequestBody ans
);
}
Below is Android File Uploading Code:
File file = new File(RealPathUtil.getRealPath(activity_add_question.this, fileUri));
RequestBody requestBody = RequestBody.create(MediaType.parse("audio/*"), file);
try {
MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.toString(), requestBody);
Log.d("name",fileToUpload.toString());
//creating request body for file
//RequestBody requestFile = RequestBody.create(MediaType.parse(getContentResolver().getType(fileUri)), file);
RequestBody section = RequestBody.create(MediaType.parse("text/plain"), sec);
RequestBody sub_section = RequestBody.create(MediaType.parse("text/plain"), sub);
RequestBody question = RequestBody.create(MediaType.parse("text/plain"), ques);
RequestBody optionA = RequestBody.create(MediaType.parse("text/plain"), optA);
RequestBody optionB = RequestBody.create(MediaType.parse("text/plain"), optB);
RequestBody optionC = RequestBody.create(MediaType.parse("text/plain"), optC);
RequestBody optionD = RequestBody.create(MediaType.parse("text/plain"), optD);
RequestBody answer = RequestBody.create(MediaType.parse("text/plain"), ans);
//The gson builder
Gson gson = new GsonBuilder()
.setLenient()
.create();
//creating retrofit object
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(" http://mazadtime.com/")
.addConverterFactory(GsonConverterFactory.create(gson))
.build();
//creating our api
FileUploadService api = retrofit.create(FileUploadService.class);
//creating a call and calling the upload image method
Call<MyResponse> call = api.upload(fileToUpload, section, sub_section, question, optionA, optionB, optionC, optionD, answer);
//finally performing the call
call.enqueue(new Callback<MyResponse>() {
@Override
public void onResponse(Call<MyResponse> call, retrofit2.Response<MyResponse> response) {
Log.d("fileres", response.body().message);
try {
if (!response.body().error) {
Toast.makeText(getApplicationContext(), "" + response.body().message, Toast.LENGTH_SHORT).show();
T//oast.makeText(getApplicationContext(), "File Uploaded Successfully...", Toast.LENGTH_LONG).show();
} else {
// Toast.makeText(getApplicationContext(), ""+response.body().message, Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "Some error occurred..." + response.body().message, Toast.LENGTH_LONG).show();
}
} catch (Exception e) {
Log.d("Retrofit catch", e.getLocalizedMessage());
}
}
@Override
public void onFailure(Call<MyResponse> call, Throwable t) {
Log.d("fileerror", t.getLocalizedMessage());
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_LONG).show();
}
});
}catch (Exception e){
Log.d("Errop",e.getLocalizedMessage());
}
But When i test api on postman it working perfectly.check it
source https://stackoverflow.com/questions/69744029/unable-to-upload-audio-fiile-with-retrofit-2-0
Comments
Post a Comment