2017-10-18 87 views
0

我无法弄清楚如何使用multipart/form-data发送带有图像的JSON对象。Http POST如何使用multipart/form-data发送JSON文件内部

POST /api/user/update 
{ id: 123, 
    user: { logo: !!here_file!! } 
} 

我试图把的base64串入标志字段,只是通过这个JSON对象,但这种方法是不行的,服务器需要内容类型:多重/ form-data的;我无法得到如何做到这一点。我已经浏览了很多问题,但没有找到如何发布JSON文件以及这个文件。

+0

哪些是您使用在后端侧解析它的语言? –

+0

@WalterPalladino不幸的是我不处理任何服务器端。 –

+0

我添加了一些正在为我工​​作的代码。希望它可以帮助你。就我而言,后端是PHP。 –

回答

0

这是我使用POST发送到后端的通用方法:

/** 
* putJSONObject 
* 
* @param url 
* @param jsonObject 
* @param timeoutMillis 
* @return 
*/ 
protected static JSONObject putJSONObject (String url, JSONObject jsonObject, int timeoutMillis) throws IOException, JSONException { 

    StringBuilder stringBuilder = new StringBuilder(); 

    HttpURLConnection httpURLConnection; 
    DataOutputStream printout; 

    httpURLConnection = (HttpURLConnection) new URL (url).openConnection(); 
    httpURLConnection.setRequestMethod ("POST"); 
    httpURLConnection.setReadTimeout (timeoutMillis); 
    httpURLConnection.setConnectTimeout (timeoutMillis); 
    httpURLConnection.setDoInput (true); 
    httpURLConnection.setDoOutput (true); 
    httpURLConnection.setUseCaches (false); 
    httpURLConnection.connect(); 

    // Send POST output. 
    printout = new DataOutputStream (httpURLConnection.getOutputStream()); 
    printout.writeBytes ("msg=" + URLEncoder.encode (jsonObject.toString(), "UTF-8")); 
    printout.flush(); 
    printout.close(); 

    InputStreamReader inputStreamReader = new InputStreamReader (httpURLConnection.getInputStream()); 

    int read; 
    char[] buff = new char[4096]; 
    while ((read = inputStreamReader.read (buff)) != -1) { 
     stringBuilder.append (buff, 0, read); 
    } 
    httpURLConnection.disconnect(); 

    return new JSONObject (stringBuilder.toString()); 

} 

的JSON发送被作为“味精”

和图像编码到一个字符串,这是我的代码:

/** 
* toBase64 
* 
* @param bitmap 
* @return String 
*/ 
public static String toBase64 (Bitmap bitmap) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); 
    byte[] imageBytes = baos.toByteArray(); 
    String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT); 
    return encodedImage; 
} 

/** 
* fromBase64 
* 
* @param encodedImage 
* @return Bitmap 
*/ 
public static Bitmap fromBase64 (String encodedImage) { 
    byte[] decodedByte = Base64.decode(encodedImage, Base64.DEFAULT); 
    return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length); 
} 

希望它可以帮助你。

0

起初你应该改变方法。在您想要发送JSON对象之前,您必须将图像(文件)加载到上传服务器。上传服务器,它是一个服务器,您将存储您的图像,并可以通过引用访问它。 它看起来像这样:使用multipart/form-data将图像上载到服务器并获取图像的链接。然后你把这个链接到您的JSON对象一样

{ 
    id: 123, 
    user: { logo: https://myuploadserver.com/img123.jpg } 
} 

然后你可以用JSON对象,做你想做

几个环节的计算器与如何使用数据上传到上传服务器的说明的multipart/form-data的:

1. simple HttpURLConnection POST file multipart/form-data
2. upload multipart form data to server