2016-07-27 2 views
0

Я пытаюсь загрузить изображение на сервер нашего проекта с использованием Дооснащение 2Отправка файла изображения с дооснащения 2

Изображение определена через собирание активности изображения и, кажется, работает с файлами (изображения) можно отобразить с помощью Пикассо.

Модернизация завершается успешно, однако сервер, похоже, не получает файл. Вот часть стороны сервера.

func (c *gin.Context) { 
    file, header , err := c.Request.FormFile("profileImage") 
    // err = http: no such file 
} 

Sever side error message

Даже RequestBody печатает последовательную информацию, когда я тестировал его (размер, тип изображения ...)

Услуги:

@Multipart 
@PATCH("/user/profileImage") 
Call<ResponseBody> modifyUserImage(@Part("profileImage") RequestBody profileImage, @Part("userID") RequestBody userID); 

После кода является частью из того же класса фрагментов

изображение Открытие собирание деятельности:

Intent getIntent = new Intent(Intent.ACTION_GET_CONTENT); 
getIntent.setType("image/*"); 

Intent pickIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
pickIntent.setType("image/*"); 

Intent chooserIntent = Intent.createChooser(getIntent, "Select Image"); 
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, new Intent[]{pickIntent}); 

startActivityForResult(chooserIntent, 1); 

На активность Результат:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK && requestCode == 1) { 
     // process the result 
     Uri selectedImage = data.getData(); 
     String wholeID = DocumentsContract.getDocumentId(selectedImage); 
     String id = wholeID.split(":")[1]; 
     String[] column = {MediaStore.Images.Media.DATA}; 
     String sel = MediaStore.Images.Media._ID + "=?"; 
     Cursor cursor = getActivity().getContentResolver(). 
       query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
         column, sel, new String[]{id}, null); 
     String filePath = ""; 
     int columnIndex = cursor.getColumnIndex(column[0]); 
     if (cursor.moveToFirst()) { 
      filePath = cursor.getString(columnIndex); 
     } 
     cursor.close(); 

     file = new File(filePath); 
     Picasso 
       .with(getActivity().getApplicationContext()) 
       .load(file) 
       .into(civ_userProfilePicture); 
    } 
} 

Запрос:

Call<ResponseBody> call = ServiceSingelton.getmInstance().getService() 
         .modifyUserImage(RequestBody.create(MediaType.parse("image/*"), file), 
             RequestBody.create(MediaType.parse("text/plain"), ServiceSingelton.getmInstance().getUserID())); 

call.enqueue(new Callback<ResponseBody>() { 
    @Override 
    public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) { 
     if (response.code() == 200) { 
      Log.d("RETROFIT SUCCESS", "Pic should be sent"); 
     } else { 
      Log.d("RETROFIT SUCCESS", "Error code received modifying user"); 
     } 
    } 

    @Override 
    public void onFailure(Call<ResponseBody> call, Throwable t) { 
     Log.d("RETROFIT ERROR", t.getMessage()); 
    } 
}); 
+0

можно ли увидеть код обработки на стороне сервера? – snkashis

+0

Отредактировано с кодом стороны сервера – Vark

ответ

1

Кто-то дал мне это исправить, который работал:

Чтобы отправить часть с именем файла, вы должны изменить @Part ("profileImage") RequestBody profileImage к @Part RequestBody profileImage, и передать это MultipartBody.Part.createFormData (partName, имя файла, requestBody):

// Service 
@Multipart 
@PATCH("/user/profileImage") 
Call<ResponseBody> modifyUserImage(@Part MultipartBody.Part profileImage, @Part("userID") RequestBody userID); 

// Call 
MultipartBody.Part imagePart = MultipartBody.Part.createFormData("profileImage", file.getName(), RequestBody.create(MediaType.parse("image/*"), file)); 
Call<ResponseBody> call = ServiceSingelton.getmInstance().getService() 
         .modifyUserImage(imagePart, 
             RequestBody.create(MediaType.parse("text/plain"), ServiceSingelton.getmInstance().getUserID())); 
Смежные вопросы