以下是我尝试使用MultipartPostData类将图像发送到远程服务器的问题。
我使用以下代码构建PostData:
PostData body = new MultipartPostData(MultipartPostData.DEFAULT_CHARSET, false);
body.append("deviceID", ""+DeviceInfo.getDeviceId());
body.append("synchro", "true");
body.append("shoot_lat", ""+latitude);
body.append("shoot_long", ""+longitude);
body.append("shoot_place", ""+city);
body.append("shoot_time", String.valueOf(time));
body.append("ref_data", "filename=\"photo.jpg\"");
//image is a byte[]
body.setData(image);
我认为设置图像的方式有问题,因为服务器无法获取此主体(如果我在请求正文中打印服务器接收和分析的数据,我会得到一个空白字符串)。< / p>
任何人都可以帮忙建立一个发送图像的工作请求吗?
非常感谢。
答案 0 :(得分:2)
好的,我终于找到了答案。
private static final String BOUNDARY = "---------------------------14737809831466499882746641449";
public void createHttpMultipartRequest(String url, Hashtable params, String fileField, String fileName, String fileType, byte[] fileBytes) throws Exception
{
this.url = url;
String boundary = getBoundaryString();
String boundaryMessage = getBoundaryMessage(boundary, params, fileField, fileName, fileType);
String endBoundary = "\r\n--" + boundary + "--\r\n";
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bos.write(boundaryMessage.getBytes());
if(fileField != null)
{
bos.write(fileBytes);
}
bos.write(endBoundary.getBytes());
this.postBytes = bos.toByteArray();
bos.close();
}
String getBoundaryString()
{
return BOUNDARY;
}
String getBoundaryMessage(String boundary, Hashtable params, String fileField, String fileName, String fileType)
{
StringBuffer res = new StringBuffer("--").append(boundary).append("\r\n");
String intermediateBoundary = "\r\n--" + boundary + "\r\n";
Enumeration keys = params.keys();
while(keys.hasMoreElements())
{
String key = (String)keys.nextElement();
String value = (String)params.get(key);
res.append("Content-Disposition: form-data; name=\"").append(key).append("\"\r\n")
.append("\r\n").append(value);
if(keys.hasMoreElements())
{
res.append(intermediateBoundary);
}
}
if(fileField != null)
{
res.append(intermediateBoundary);
res.append("Content-Disposition: form-data; name=\"").append(fileField).append("\"; filename=\"").append(fileName).append("\"\r\n")
.append("Content-Type: ").append(fileType).append("\r\n\r\n");
}
return res.toString();
}
Hashtable包含表单的所有参数。 fileBytes包含要发送的数据。