Android Studio - 快速的 Android 网络库将文件上传到服务器 - 错误

SNo*_*Nos 1 php android android-networking

我正在尝试将从相机或图库拍摄的图像上传到 php 服务器。为此,我正在使用库Fast-Android-Networking

使用我的代码,我可以看到文件正在写入服务器,但是,它保存为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");
                        }
                    });
        }
Run Code Online (Sandbox Code Playgroud)

Koo*_*osh 5

当我看到你的问题时,我正在编写确切的场景。我很高兴地告诉你,我刚刚做到了。

这是安卓代码:

@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();
}
}
Run Code Online (Sandbox Code Playgroud)

这是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);
?>
Run Code Online (Sandbox Code Playgroud)

注意:1. 将这些权限添加到您的清单中:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
  1. 对于等于或高于 23 的 API 级别,您应该在运行时请求第二个权限。看到这个
  2. 不要忘记在您的服务器中创建一个文件夹,如下所示:

面板

  1. 还要确保您已将此行添加到您的OnCreate

    AndroidNetworking.initialize(getApplicationContext());