0

I want to upload .pdf file to server where php code is

<?php $con = mysqli_connect("localhost","db_user","pwd","api_db"); $user_id = $_POST['id']; $title = $_POST['cvTitle']; $allowedExts = array("docx","doc", "pdf", "txt"); $temp = explode(".", $_FILES['cvfile']["name"]); $extension = end($temp); if ((($_FILES["cvfile"]["type"] == "application/pdf") || ($_FILES["cvfile"]["type"] == "application/text/plain") || ($_FILES["cvfile"]["type"] == "application/msword") || ($_FILES["cvfile"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")) && in_array($extension, $allowedExts)){ //inner if if ($_FILES["cvfile"]["error"] > 0){ echo "Failed 1"; } else{ }// end inner else $f_name = time().$_FILES['cvfile']["name"]; move_uploaded_file($_FILES['cvfile']["tmp_name"], "upload/" . $f_name); $file_name = $f_name; } else { $json = array("File Type Not Allowed"); header('content-type: application/json'); echo json_encode($json); } // end else $query = "UPDATE users set cv = '$file_name', cvTitle = '$title' where id = '$user_id'"; if (mysqli_query($db,$query)) { $json = array("cv" => $file_name, "cvTitle" => $title); header('content-type: application/json'); echo json_encode($json); } ?> 

my service is

@FormUrlEncoded @Multipart @POST("updatecv.php") Call<User> uploadUserCV(@Field("id") String id, @Field("cvTitle") String cvTitle, @Part MultipartBody.Part cv); 

and finally I'm making call as

@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.action_cv : { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); startActivityForResult(Intent.createChooser(intent, "Choose file using"), Constant.REQUEST_CODE_OPEN); return true; } } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); try { if (requestCode == Constant.REQUEST_CODE_OPEN){ if (resultCode == RESULT_OK && null != data){ String type = Utils.getMimeType(UpdateProfileActivity.this, data.getData()); if (validateFileType(type)){ // Get the Image from data Uri selectedFile = data.getData(); String[] filePathColumn = {MediaStore.Files.FileColumns.DATA}; Cursor cursor = getContentResolver().query(selectedFile, filePathColumn, null, null, null); assert cursor != null; cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); mediaPath = cursor.getString(columnIndex); cursor.close(); uploadFile(); } else { Toast.makeText(UpdateProfileActivity.this, "File type is not allowed", Toast.LENGTH_SHORT).show(); } Log.e("FILE_TYPE", Utils.getMimeType(UpdateProfileActivity.this, data.getData())); } } } catch (Exception e){ e.printStackTrace(); } } // Uploading CV private void uploadFile() { final Dialog dialog = Utils.showPreloaderDialog(UpdateProfileActivity.this); dialog.show(); // Map is used to multipart the file using okhttp3.RequestBody File file = new File(mediaPath); // Parsing any Media type file final RequestBody requestBody = RequestBody.create(MediaType.parse("*/*"), file); MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), requestBody); mUserCall = mRestManager.getApiService().uploadUserCV(uid, file.getName(), fileToUpload); mUserCall.enqueue(new Callback<User>() { @Override public void onResponse(Call<User> call, Response<User> response) { User user = response.body(); Log.e("UPLOADED_FILE", "name is " + user.getCvTitle()); dialog.dismiss(); } @Override public void onFailure(Call<User> call, Throwable t) { dialog.dismiss(); Log.e("UPLOADED_FILE_ERROR", "Message is " + t.getMessage()); Toast.makeText(UpdateProfileActivity.this, "Something went wrong", Toast.LENGTH_SHORT).show(); } }); } private boolean validateFileType(String type){ String [] allowedFileTypes = {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/msword", "text/plain", "application/pdf"}; for (int i = 0; i<=allowedFileTypes.length; i++){ if (allowedFileTypes[i].equals(type)){ return true; } } return false; } 

but this code is not uploading the file to server no any errors. I wan to know where are the things wrong in php code or in android side. Any help is highly appreciated.

1
  • You can try this. This is just for your reference it is working fine. Commented Jun 22, 2017 at 6:07

2 Answers 2

1

According to your PHP, you're looking for form-data part with name cvfile, but in Android code you're passing file as a name of the form-data part. So all you need is to change file to cvfile, like this:

MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("cvfile", file.getName(), requestBody); 

Hopefully it should work.

Sign up to request clarification or add additional context in comments.

Comments

0

It seems you are testing on localhost then inside app localhost url is needed ....to grab that type ipconfig (in cmd on windows) copy that ip which is connected to lan or wifi. then check is upload.php file present or not on that ip address. for eg : 192.168.1.102/upload.php after that copy the ip and add in base url of retrofit builder in retrofit client class. Hope it will solve your issue :)

1 Comment

Thanks for your advice but the file I'm testing with remote server not local host, .php is available there as well, but code is not working, any other suggestions to resolve this issue please.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.