Android Studio — Быстрая загрузка сетевой библиотеки Android на сервер — ошибка

Я пытаюсь загрузить изображение, снятое с камеры или галереи, на сервер php. Для этого я использую библиотеку Фаст-Android-сети

С моим кодом я вижу, что файл пишет на сервере, однако, он сохраняется с 0 B, так же onProgress Функция выводит правильные записанные байты.

Любая помощь с этим? Как правильно передать файл, снятый с камеры или галереи, на сервер с помощью этой библиотеки?

private File mFileTemp;

btn_update.setOnClickListener(new OnClickListener() {
// Start new list activity
public void onClick(View v) {
uploadFileNew(pref.getString("user_id", null));
}
});

public void uploadFileNew(String frm_iduser) {

String uploadUrl = "https://plus.example.com/apps/mobile/registered_users/uploadProfilePicAndroid.php?fileName=" + frm_iduser + ".png";

AndroidNetworking.upload(uploadUrl)
.addMultipartFile("image",mFileTemp)
.addMultipartParameter("key","value")
.setTag("uploadTest")
.setPriority(Priority.HIGH)
.build()
.setUploadProgressListener(new UploadProgressListener() {
@Override
public void onProgress(long bytesUploaded, long totalBytes) {
// do anything with progress
Log.d("responce_app",String.valueOf(bytesUploaded));
}
})
.getAsJSONObject(new JSONObjectRequestListener() {
@Override
public void onResponse(JSONObject response) {
// do anything with response
Log.d("responce_app",String.valueOf(response));
}
@Override
public void onError(ANError error) {
// handle error
Log.d("responce_app",String.valueOf(error));
Log.d("responce_app","errorrrr");
}
});
}

0

Решение

Я кодировал точный сценарий, когда увидел твой вопрос. И я рад сообщить вам, что только что сделал это.

Вот код Android:

@Override
public void onClick(View view) {
Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
photoPickerIntent.setType("image/*");
startActivityForResult(photoPickerIntent, 5000);
}
public String getRealPathFromURI(Uri contentURI, Activity context) {
String[] projection = { MediaStore.Images.Media.DATA };
@SuppressWarnings("deprecation")
Cursor cursor = context.managedQuery(contentURI, projection, null,
null, null);
if (cursor == null)
return null;
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
if (cursor.moveToFirst()) {
String s = cursor.getString(column_index);
// cursor.close();
return s;
}
// cursor.close();
return null;
}
@Override
protected void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);if (resultCode == RESULT_OK) {
try {
final Uri selectedImageUri = data.getData();
//final InputStream imageStream = //getContentResolver().openInputStream(selectedImageUri);
//final Bitmap selectedImage = //BitmapFactory.decodeStream(imageStream);
//imgUser.setImageBitmap(selectedImage);
String imagepath = getRealPathFromURI(selectedImageUri,this);
File imageFile = new File(imagepath);AndroidNetworking.upload("http://test.sth.com/upload_file4.php")
.addMultipartFile("file", imageFile)
//.addMultipartParameter("key","value")
//.setTag("uploadTest")
.setPriority(Priority.HIGH)
.build()
.setUploadProgressListener(new UploadProgressListener() {
@Override
public void onProgress(long bytesUploaded, long totalBytes) {
// do anything with progress
tvProgress.setText((bytesUploaded / totalBytes)*100 + " %");
}
})
.getAsString(new StringRequestListener() {
@Override
public void onResponse(String response) {
Toast.makeText(MainActivity.this, response, Toast.LENGTH_SHORT).show();
}

@Override
public void onError(ANError anError) {
Toast.makeText(MainActivity.this, anError.getMessage(), Toast.LENGTH_SHORT).show();
}
});} catch (FileNotFoundException e) {
e.printStackTrace();
Toast.makeText(MainActivity.this, "Something went wrong", Toast.LENGTH_LONG).show();
}

}else {
Toast.makeText(MainActivity.this, "You haven't picked Image",Toast.LENGTH_LONG).show();
}
}

Вот код php:

<?php

$target_dir = "uploads/";
$target_file_name = $target_dir.basename($_FILES["file"]["name"]);
$response = array();

if(isset($_FILES["file"]))
{
if(move_uploaded_file($_FILES["file"]["tmp_name"],$target_file_name))
{
$success = true;
$message = "Uploaded!!!";
}
else
{
$success = false;
$message = "NOT Uploaded!!! _ Error While Uploading";
}
}
else{
$success = false;
$message = "missing field";
}
$response["success"] = $success;
$response["message"] = $message;
echo json_encode($response);
?>

Замечания:
1. Добавьте эти разрешения в свой манифест:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  1. Для уровня API, равного и выше 23, вы должны запросить второе разрешение во время выполнения. увидеть этот.
  2. Не забудьте создать папку на вашем сервере, как показано ниже:

CPanel

  1. Также убедитесь, что вы добавили эту строку в свой OnCreate:

    AndroidNetworking.initialize (getApplicationContext ());

1

Другие решения

Кажется, с вашим кодом все в порядке. Похоже, ваш серверный код виноват здесь.

Опубликовать содержимое uploadProfilePicAndroid.php так что мы можем найти проблему.

Также нет необходимости передавать имя файла по адресу:

String uploadUrl = "https://plus.example.com/apps/mobile/registered_users/uploadProfilePicAndroid.php?fileName=" + frm_iduser + ".png"

В коде php вы можете получить доступ к файлу, используя имя "image" Вы указали здесь:

 .addMultipartFile("image",mFileTemp)

Кроме того, всякий раз, когда вам необходимо отправить дополнительные данные в вашем запросе, делайте это, используя библиотеку, а не адрес, как вы это сделали с "key" а также "value":

 .addMultipartParameter("key","value")
0

По вопросам рекламы [email protected]