无法通过改造将图像上传到服务器

时间:2016-10-25 03:38:21

标签: android json android-studio image-uploading retrofit2

我正在处理如何通过改造将图像发送到服务器的问题。服务器能够检索我发送的内容,但是当我在邮递员中尝试时,它显示的是我不想要的东西。我先告诉你我的数据。

这是MyProfileActivity.java

在Oncreate我把它。

    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
    OkHttpClient client = new OkHttpClient.Builder().addInterceptor(interceptor).build();
    service = new Retrofit.Builder().baseUrl("http://lfapp.learnflux.net/v1/").client(client).build().create(com.idesolusiasia.learnflux.Service.class);

我单击用户选择图像的按钮并将其发送到服务器,如下所示。

            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Image"), PICK_IMAGE);

在我的活动中结果

if (requestCode == PICK_IMAGE && resultCode == Activity.RESULT_OK) {

        Uri selectedImage = data.getData();
        String path = getRealPathFromUri(selectedImage);
        File file = new File(path);


        RequestBody reqFile = RequestBody.create(MediaType.parse("application/image"), file);
        MultipartBody.Part body = MultipartBody.Part.createFormData("upload", file.getName(), reqFile);
        String token = "Bearer " + User.getUser().getAccess_token();
        Log.d("THIS", data.getData().getPath());

        retrofit2.Call<okhttp3.ResponseBody> req = service.putImage(token ,body);
        req.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, retrofit2.Response<ResponseBody> response) {
                        Toast.makeText(getApplicationContext(), "Success", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                t.printStackTrace();
            }
        });
    }

我也从下面获取TheRealPath

public String getRealPathFromUri(final Uri uri) {
    // DocumentProvider
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(getApplicationContext(), uri)) {
        // ExternalStorageProvider
        if (isExternalStorageDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            if ("primary".equalsIgnoreCase(type)) {
                return Environment.getExternalStorageDirectory() + "/" + split[1];
            }
        }
        // DownloadsProvider
        else if (isDownloadsDocument(uri)) {

            final String id = DocumentsContract.getDocumentId(uri);
            final Uri contentUri = ContentUris.withAppendedId(
                    Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));

            return getDataColumn(getApplicationContext(), contentUri, null, null);
        }
        // MediaProvider
        else if (isMediaDocument(uri)) {
            final String docId = DocumentsContract.getDocumentId(uri);
            final String[] split = docId.split(":");
            final String type = split[0];

            Uri contentUri = null;
            if ("image".equals(type)) {
                contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            } else if ("video".equals(type)) {
                contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
            } else if ("audio".equals(type)) {
                contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            }

            final String selection = "_id=?";
            final String[] selectionArgs = new String[]{
                    split[1]
            };

            return getDataColumn(getApplicationContext(), contentUri, selection, selectionArgs);
        }
    }
    // MediaStore (and general)
    else if ("content".equalsIgnoreCase(uri.getScheme())) {

        // Return the remote address
        if (isGooglePhotosUri(uri))
            return uri.getLastPathSegment();

        return getDataColumn(getApplicationContext(), uri, null, null);
    }
    // File
    else if ("file".equalsIgnoreCase(uri.getScheme())) {
        return uri.getPath();
    }

    return null;
}

private String getDataColumn(Context context, Uri uri, String selection,
                             String[] selectionArgs) {

    Cursor cursor = null;
    final String column = "_data";
    final String[] projection = {
            column
    };

    try {
        cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,
                null);
        if (cursor != null && cursor.moveToFirst()) {
            final int index = cursor.getColumnIndexOrThrow(column);
            return cursor.getString(index);
        }
    } finally {
        if (cursor != null)
            cursor.close();
    }
    return null;
}

private boolean isExternalStorageDocument(Uri uri) {
    return "com.android.externalstorage.documents".equals(uri.getAuthority());
}

private boolean isDownloadsDocument(Uri uri) {
    return "com.android.providers.downloads.documents".equals(uri.getAuthority());
}

private boolean isMediaDocument(Uri uri) {
    return "com.android.providers.media.documents".equals(uri.getAuthority());
}

private boolean isGooglePhotosUri(Uri uri) {
    return "com.google.android.apps.photos.content".equals(uri.getAuthority());
}

我的服务界面如下所示

    @Multipart
@Headers("Content-type: application/image")
@PUT("me/image?key=profile/1")
Call<ResponseBody>
putImage(@Header("Authorization")String authorization, @Part MultipartBody.Part image);

当我使用邮递员从我发送的内容中获取数据时,它会显示�PNG和一堆数据。我想知道我是否正确发送它或者我错过了什么。如果有人可以提供帮助,我将不胜感激。感谢。

当我记录它时显示我

--> PUT http://lfapp.learnflux.net/v1/me/image?key=profile/1 http/1.1 

D/OkHttp: Content-Type: multipart/form-data; boundary=9a0fa5ce-b567-4115-    8e09-887291d68ab0  D/OkHttp: Content-Length: 181750   D/OkHttp: Authorization: Bearer ZDE1MGIwNGNjYmRkY2VkN2Y4ZGNhYWFmMDVmYTQyMmMzODk4YjcxN2M3YWZjNTNjNDlhNjBlMTQ1NWJlMWEwOQ
            D/OkHttp: --9a0fa5ce-b567-4115-8e09-887291d68ab0
            D/OkHttp: Content-Disposition: form-data; name="Image"; filename="IMG_20160712_104745.jpg"
            D/OkHttp: Content-Type: image/png
            D/OkHttp: Content-Length: 1817285
        ����!Exif����MM��*��������  ��������������z���������������������������������������������(��������������2������������������������������i����������������%������������������Xiaomi����Redmi Note3��������H������������H������2016:07:12 10:47:45���������������������������������"�����������������'������������������������0220��������������������������,��������������
        D/OkHttp: ����������@�������������H���
        D/OkHttp: ����������P����������������   ���������������
        D/OkHttp: ������������X��������������`��������������h��������������p�����������0100���������������������������������������������������������w���������������������������������������������������������������������������������������������������������������������������������d2016:07:12 10:47:45��2016:07:12 10:47:45�������������������������d��������������d����e������d753175����753175����753175��������������R98������������0100������������
        D/OkHttp: ������������������������S������������������������������E��������������������4��������������������������������L��������������T��������������l��������������x���������������������d�������������������������������'������p������������*��������������'�����������������������������/������������)������ASCII������GPS��2016:07:12����������������������������������������������(���������������������������������������0��������������H������������H���������������     
        D/OkHttp:  $.' ",#(7),01444'9=82<.342           2!!22222222222222222222222222222222222222222222222222����@���"������������������������� 
        D/OkHttp: ������}��!1AQa"q2���#B��R��$3br�  
        D/OkHttp: %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz���������������������������������������������������������������������������������������  
        D/OkHttp: ����w��!1AQaq"2�B���� #3R�br�
        D/OkHttp: $4�%�&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz��������������������������������������������������������������������������������������?����7Q��$3ۙI<���P�X�Vŀa�B�+ѓJ�c ¥�ˌ��=B�79ة�E�̧��k��qi7�.a=�i������U[�Z��6Uv��5MA�ڈ�   �fo [e���7@qU��RRʋ��(�?c���թAe
        D/OkHttp: �'���n��൐An�>Ӵ+Mp�շ��XI<�y{��ѐy�{�+����tl<��ϗ�F[�8�T�*�<l�ٻ�/cd���u$l�T�H�;�3n�F,��&�n�sV`ظ���@�-J��9zP"`� 58�L   2(��ў(OJcE�����u�
        D/OkHttp: ���J9�֞:P2AN4�h)�(9��iE��8c��4Z�������#>*�Jn�,U��+;r�3��X���-�۩��*)�.v6o�[��cʀ�b*;ӓw��z�<UD�"QҦH�2E6��Ϊ�Q�UQqD;����r�Y�m������O��?��^�a���i&���=H��[[{[��5ڽ�j�<�KY7�&6!�E\z˩b{���J��5TK�rF�#�*qqj�%^}�[����h"�L>Y�4����n8�O[����7j.(����5 �k4F�8��!*�3Nz��G��in��}�<\ޞ.{Qa�)A���� �{R�4�x��2�Ī{�2py�f���?p����.M43ށ��.O�4G֗<t������U����� �\r#�rK!!�~R[���{�h�����5����>���b>�=�q�J�ȇ*�>����T����SN�؊�SP����G��]nu���T��l�����^�`f9V��.����}F�La��hI��)#]:d��������9|�*7!� S�d8#ɐt�(k���H?�h�n�*#n���>b}�Mu�����j�k�I�c}E+@�p��D�c�/�|��l������Yl��j�~"�8�-�_�5�b�����"=�~��K�:h�&Ǎ��j�ͦO�.���8�;��zL���'؜��F�5W0�N��:   y�h���CҸo"�>B��Z�;�B܍�3�?�4�c�mut�U��S�M`��f�a��_��z��`��{�(��{��/�6H���C��s���:H����oW��w���kk�s���; ����֜�0=MnG�[��R2�"�.��]�څ����.s"䊐]c�]���d0�5BO]��6�9�u�H.A�>�w�6��·�9���s���YN-�=�j� �S��<�J�Jd8�6�qQPHiiZ0�M8�M ҏ5�G?�!�,;�Qw*� �E8^���y#U�4Ҳ)I���g�#���MfJ�R�٭�n����j��ш��U�,�ir��Z6�����7� ?Jx���C
        D/OkHttp: ,�̅t$}<K(�)?^i�X[���K�Xp*.�d�y�����Q��֣�EFP���їFi�1r!�M��x���&�����gB*=�"�#���/f�?��?�淓���֝��n|=y=ı�QI��H�Y��q�:b�v�AJ���;��lSSD�2X�uk7;��O�v�m�_Z���=%P�A/�S�َ̇�)���$�   ?ތU)�]6tP�L՗}����M����F��b�D�b|���:��W���Yb�Tr(���q�©O̞C���W|N��5't{㚲x����W�����$V�GZ�A������֐�2*3R���S=�3HcI�q����CIA��aIE�(���
        D/OkHttp: PH�H���ܐO"�sR-䃨��E��˂����R�7F �E+�����e�Q���=du��~4�F�_c���T�����Ӆ��)�R�)MF(���YgOR*U��ҳ+����Zu$+��N~���zTdU�X:�^E2A�C�DK�ʟ���S�+�*r(TR�咊��a���j��a��Di����M)��M��������Q@%-%��QE �J)��Q�(���
        D/OkHttp: ��Zp������V
        D/OkHttp: ��FEX�H��Fѱ�!������f�g!���)J�h�<t~��}�P!�B�3T/HZ�i�Q�@4�R�m���Q@  E���QE���R�b��Q@    E��(��`�R���8RS�����TDT�
        D/OkHttp: ad��La���Vq�?ިpƬJ?x��5�H
        9a0fa5ce-b567-4115-8e09-887291d68ab0--
        D/OkHttp: --> END PUT (1817503-byte body)
        I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@3c9a1e7f time:579318048
        I/Choreographer: Skipped 57 frames!  The application may be doing too much work on its main thread.
        D/OkHttp: <-- 200 OK http://lfapp.learnflux.net/v1/me/image?key=profile/1 (2409ms)
        D/OkHttp: Date: Tue, 25 Oct 2016 09:49:55 GMT
        D/OkHttp: Server: Apache/2.4.7 (Ubuntu)
        D/OkHttp: X-Powered-By: PHP/5.5.9-1ubuntu4.16
        D/OkHttp: Cache-Control: no-cache
        D/OkHttp: Content-Length: 2
        D/OkHttp: Keep-Alive: timeout=5, max=100
        D/OkHttp: Connection: Keep-Alive
        D/OkHttp: Content-Type: application/json
        D/OkHttp: ""
        D/OkHttp: <-- END HTTP (2-byte body)

1 个答案:

答案 0 :(得分:0)

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);


        if (resultCode == RESULT_OK) {

            if (requestCode == FILE_PICKER_REQUEST_CODE
                    && resultCode == RESULT_OK && null != data) {

                Uri selectedImage = data.getData();
                String str = getRealPathFromUri(this, selectedImage);
                uploadFile2(str);

            }
        }
    }

    public static String getRealPathFromUri(Context context, Uri contentUri) {
        Cursor cursor = null;
        try {
            String[] proj = {MediaStore.Images.Media.DATA};
            cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }

WebserviceCall方法

 private void uploadFile2(String fileUri) {
        //slp upload profile image
        RequestBody userid =
                RequestBody.create(
                        MediaType.parse("text/plain"), ("16151"));
        RequestBody username = RequestBody.create(MediaType.parse("multipart/form-data"), "ankitgiri1");
        RequestBody password = RequestBody.create(MediaType.parse("multipart/form-data"), "1");
        RequestBody email = RequestBody.create(MediaType.parse("multipart/form-data"), "ankitgiri@gmail.com");
        RequestBody fullname = RequestBody.create(MediaType.parse("multipart/form-data"), "ankitgiri");
        RequestBody mobile = RequestBody.create(MediaType.parse("multipart/form-data"), "1471471471");
        RequestBody country = RequestBody.create(MediaType.parse("multipart/form-data"), "India");
        RequestBody education = RequestBody.create(MediaType.parse("multipart/form-data"), "MCA");
        RequestBody common = RequestBody.create(MediaType.parse("multipart/form-data"), "");
        RequestBody DOB = RequestBody.create(MediaType.parse("multipart/form-data"), "2012-02-02 00:00:00");
        RequestBody lng = RequestBody.create(MediaType.parse("multipart/form-data"), "3");
        RequestBody learningMethod = RequestBody.create(MediaType.parse("multipart/form-data"), "1");
        RequestBody RepeatCounter = RequestBody.create(MediaType.parse("multipart/form-data"), "2");

        // create upload service client

        // use the FileUtils to get the actual file by uri
        File file = new File(fileUri);

        // create RequestBody instance from file
        RequestBody requestFile =
                RequestBody.create(MediaType.parse("multipart/form-data"), file);

        // MultipartBody.Part is used to send also the actual file name
        MultipartBody.Part body =
                MultipartBody.Part.createFormData("ProfilePic", "dipalitest.jpg", requestFile);

        // finally, execute the request
        Call<User> call = WebServiceClient.getWebService().updateUser2new(
                username, password, userid, email, fullname, mobile, common,
                common, DOB, country, education, common, lng, learningMethod, RepeatCounter, body);

        call.enqueue(new Callback<User>() {
            @Override
            public void onResponse(Call<User> call,
                                   Response<User> response) {
                Log.v("Upload", "Resonse=" + response.message());
            }

            @Override
            public void onFailure(Call<User> call, Throwable t) {
                Log.e("Upload error:", t.getMessage());
            }
        });
    }

WebService Call

@Multipart
    @POST("UserProfile/SetUserProfile")
    Call<User> updateUser2new(@Part("Username") RequestBody Username, @Part("Password") RequestBody password, @Part("UserId") RequestBody userID,
                              @Part("Email") RequestBody email, @Part("FullName") RequestBody FullName,
                              @Part("Mobile") RequestBody Mobile, @Part("ParentMobile") RequestBody ParentMobile,
                              @Part("Address") RequestBody Address, @Part("Dob") RequestBody Dob, @Part("Country") RequestBody Country,
                              @Part("Education") RequestBody Education, @Part("ReligiousStudy") RequestBody ReligiousStudy, @Part("Language") RequestBody Language,
                              @Part("LearningMethod") RequestBody LearningMethod, @Part("RepeatCounter") RequestBody RepeatCounter,
                              @Part MultipartBody.Part file);