2016-07-27 139 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(零件名称,文件名,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()));