문자열 유형의 페이로드 본문이있는 API가 있습니다. 그러나 페이로드 본문의 일부로 json
과 image
(multiparty/form)이 모두 있습니다. 이런 식으로 뭔가가 :문자열 매개 변수가있는 다중 부분/양식 이미지를 android에 게시하는 방법
json={jsonbody} [email protected]/testing.png
이 내가
public static String uploadImageQuery(Context context, String urlString, String method,
JSONObject jsonObject, Bitmap largeImageBitmap,
Dialog dialog) throws IOException {
String responseString = null;
HttpURLConnection conn = null;
URL url = new URL(urlString);
conn = (HttpURLConnection) url.openConnection();
Log.d(TAG, "Uploading largeImageBitmap ..");
conn.setConnectTimeout((int) Constants.THREE_MINUTES);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod(method);
conn.setChunkedStreamingMode(16 * 1024);
conn.setRequestProperty("Transfer-Encoding", "chunked");
// The “boundry” can be any string. In this example it’s **********.
// It’s used in the body of the request to seperate each field being submitted.
//conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
conn.setRequestProperty("Authorization", "Bearer " + access_token);
conn.connect();
DataOutputStream dataOS = new DataOutputStream(conn.getOutputStream());
dataOS.write(("json=" + jsonObject.toString()).getBytes(Constants.CHARSET_UTF_8));
dataOS.write(("image=").getBytes(Constants.CHARSET_UTF_8));
/* Standard order patten for sending multipart data*/
dataOS.write(buildStartPayload().getBytes(Constants.CHARSET_UTF_8));
dataOS.write(getImageBytes(largeImageBitmap));
dataOS.write(buildEndPayload().getBytes(Constants.CHARSET_UTF_8));
Log.d(TAG, "Posting String data to server : " + dataOS.toString());
dataOS.flush();
dataOS.close();
// Ensure we got the HTTP 200 response code
int responseCode = conn.getResponseCode();
String responseMessage = conn.getResponseMessage();
Log.d(TAG, "Response code for upload image query : " + responseCode + " Message : " + responseMessage);
if (responseCode != 200) {
dialog.cancel();
Log.e(TAG, String.format("Received the response code %d from the URL %s", responseCode, url));
// DisplayMessage.error("Couldn't upload image. Please try again later.", activity);
}
// Read the response
InputStream is = conn.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int bytesRead;
while ((bytesRead = is.read(bytes)) != -1) {
baos.write(bytes, 0, bytesRead);
}
byte[] bytesReceived = baos.toByteArray();
baos.close();
is.close();
String response = new String(bytesReceived);
Log.d(TAG, "Response:" + response);
conn.disconnect();
conn = null;
Log.d(TAG, "Cleard the connection handle.");
return responseString;
}
private static String buildStartPayload() {
String contentDisposition = "Content-Disposition: form-data; name=\"testing\"; filename=\"testing.png\"";
String contentType = "Content-Type: image/png";
// This is the standard format for a multipart request
StringBuilder requestBody = new StringBuilder();
requestBody.append(LINE_START);
requestBody.append(BOUNDARY);
requestBody.append(LINE_END);
requestBody.append(contentDisposition);
requestBody.append(LINE_END);
requestBody.append(contentType);
requestBody.append(LINE_END);
requestBody.append(LINE_END);
return requestBody.toString();
}
private static String buildEndPayload() {
// This is the standard format for a multipart request
StringBuilder requestBody = new StringBuilder();
requestBody.append(LINE_END + LINE_START + BOUNDARY + LINE_START + LINE_END);
return requestBody.toString();
}
현재 일을하고 나는 다중/폼 이미지를 게시하기 전에 HttpURLConnection
을 사용하고 DataOutputform
를 사용하여 그 일을 시도하지만 난 "나쁜 무엇입니까 무엇인가 요청 "오류가 발생했습니다. 도움이되는 도서관이 있습니까? 내가 발리 슛을 사용하지만 좋은 이미지를 지원하지 않습니다. 나는 개조를 시도하지 않았지만 지금 당장 가고 싶지 않다. 나는 이것이 HttpURLConnection
을 사용하여 이루어지기를 희망한다.
원한다면 문자열로 된 이미지는 Base 64 - https://www.base64-image.de/를 사용합니다. - 그런 다음 문자열 요청에 대해 Volley를 사용하지만 picasso와 같은 것을 사용하여 이미지 http : //를 처리한다는 의미는 아닙니다. square.github.io/picasso/ - 내가 사용하는 글은 글라이드 https://github.com/bumptech/glide를 사용할 수 있으며, 또 다른 인기있는 이미지는 유니버설 이미지 로더 https://github.com/nostra13/Android입니다. - Universal-Image-Loader – Tasos
Gaurav에서 비트 맵을 64 진수로 인코딩 된 문자열로 변환하고 다른 매개 변수와 같은 형식으로 게시 할 수 있습니다. 서버 측에서는베이스 64를 받고 비트 맵으로 저장합니다. – Aakash
서버 쪽이 내 통제하에 있지 않습니다. API를 통합하고 있으며 API에서 jpeg 형식의 이미지가 필요합니다. 중요한 문제는 API가 잘 정의되어 있지 않다는 것입니다. –