Http POST如何使用multipart/form-data发送JSON文件内部
问题描述:
我无法弄清楚如何使用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文件以及这个文件。
答
这是我使用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);
}
希望它可以帮助你。
答
起初你应该改变方法。在您想要发送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
哪些是您使用在后端侧解析它的语言? –
@WalterPalladino不幸的是我不处理任何服务器端。 –
我添加了一些正在为我工作的代码。希望它可以帮助你。就我而言,后端是PHP。 –