Skip to main content

Unable To Upload Audio/FIile with Retrofit 2.0

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

Popular posts from this blog

How to show number of registered users in Laravel based on usertype?

i'm trying to display data from the database in the admin dashboard i used this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count(); echo $users; ?> and i have successfully get the correct data from the database but what if i want to display a specific data for example in this user table there is "usertype" that specify if the user is normal user or admin i want to user the same code above but to display a specific usertype i tried this: <?php use Illuminate\Support\Facades\DB; $users = DB::table('users')->count()->WHERE usertype =admin; echo $users; ?> but it didn't work, what am i doing wrong? source https://stackoverflow.com/questions/68199726/how-to-show-number-of-registered-users-in-laravel-based-on-usertype

Confusion between commands.Bot and discord.Client | Which one should I use?

Whenever you look at YouTube tutorials or code from this website there is a real variation. Some developers use client = discord.Client(intents=intents) while the others use bot = commands.Bot(command_prefix="something", intents=intents) . Now I know slightly about the difference but I get errors from different places from my code when I use either of them and its confusing. Especially since there has a few changes over the years in discord.py it is hard to find the real difference. I tried sticking to discord.Client then I found that there are more features in commands.Bot . Then I found errors when using commands.Bot . An example of this is: When I try to use commands.Bot client = commands.Bot(command_prefix=">",intents=intents) async def load(): for filename in os.listdir("./Cogs"): if filename.endswith(".py"): client.load_extension(f"Cogs.{filename[:-3]}") The above doesnt giveany response from my Cogs ...

Why is my reports service not connecting?

I am trying to pull some data from a Postgres database using Node.js and node-postures but I can't figure out why my service isn't connecting. my routes/index.js file: const express = require('express'); const router = express.Router(); const ordersCountController = require('../controllers/ordersCountController'); const ordersController = require('../controllers/ordersController'); const weeklyReportsController = require('../controllers/weeklyReportsController'); router.get('/orders_count', ordersCountController); router.get('/orders', ordersController); router.get('/weekly_reports', weeklyReportsController); module.exports = router; My controllers/weeklyReportsController.js file: const weeklyReportsService = require('../services/weeklyReportsService'); const weeklyReportsController = async (req, res) => { try { const data = await weeklyReportsService; res.json({data}) console...