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