我正在开发一个Android应用程序,在我的应用程序中,我想将图像数据发送到我的服务器。所以我正在使用put请求。我不想用json对象发送图像数据。我只想发送图像数据作为HTTP put请求的主体。并且还想设置标题内容长度。所以我尝试了以下方式。
@Override
protected Void doInBackground(Void... unused) {
HttpClient hc = new DefaultHttpClient();
String message;
HttpPut p = new HttpPut("abc.com");
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.JPEG, 100, bos);
byte[] data = bos.toByteArray();
try {
p.setEntity(new StringEntity(data.toString()));
p.setHeader("Content-Length", Long.toString(data.length));
//p.setHeader("Content-Length", "0");
HttpResponse resp = hc.execute(p);
if (resp != null)
{
if (resp.getStatusLine().getStatusCode() == 204)
{
}
}
Log.d("Status line", "" + resp.getStatusLine().getStatusCode());
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onProgressUpdate(Void... unsued) {
}
@Override
protected void onPostExecute(Void result) {
try {
if (dialog.isShowing())
dialog.dismiss();
Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "before exception "+result);
} catch (Exception e) {
Log.i("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", "inside catch ");
Toast.makeText(getApplicationContext(),"Error"+e,
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(), e.getMessage(), e);
}
}
}
所以我心中有两个未清除的问题。
1)我想在不使用multipart而不使用json对象的情况下将图像数据发送到我的服务器。只需将其设置为请求体。怎么做?
2)我想将内容长度设置为标题部分。怎么做?
当我尝试设置内容长度时,它会给我系统错误client protocol exception
需要关于这两个问题的帮助。谢谢。
答案 0 :(得分:0)
作为上述评论者之一,您不希望将byte []更改为字符串。您很可能会破坏您尝试发送的图像(我自己尝试过)。
您应该尝试使用ByteArrayEntity(而不是StringEntity):
p.setEntity(new ByteArrayEntity(data));