我正在尝试编写代码以将jpg图像发送到可以接收JSON请求的服务器。该图像存储在设备上。我基本上移植了一个使用Requests: HTTP for Humans与服务器通信的Python代码。到目前为止,我设法与下面粘贴的代码建立通信。所以我可以看到一些希望。
// JAVA code on Android
String URL = BASE_URL + "/relative_url";
JsonObjectRequest postRequest = new JsonObjectRequest( Request.Method.POST, URL, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.i(TAG, "Successful POST request");
try {
sceneid = response.getInt("id");
Log.i(TAG, "Scene id: " + sceneid);
} catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.i(TAG, "Bad POST request");
}
}) {
@Override
public Map<String, String> getHeaders() throws AuthFailureError {
Map<String, String> headers = new HashMap<>();
String credentials = "myuser:mypass";
String auth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP);
headers.put("Authorization", auth);
return headers;
}
};
queue.add(postRequest);
但是,我无法复制下面的Python代码。我已经在网上彻底检查过一个解决方案,但我没有设法让它工作。我发现的解决方案要么使用已弃用的库,要么代码不起作用。我试图复制的python中的命令是:
# Python code to replicate in JAVA
auth = {'myuser', 'mypass'}
file = {'jpgdata': open('myimg.jpg','rb')}
req = requests.post(BASE_URL + '/relative_url', params={'param', param}, files=file, auth=auth)
非常感谢一些帮助。
提前谢谢。
答案 0 :(得分:0)
您需要将该文件中的字节读入byte []并将该对象放入JSONObject中。
您还应该查看以下帖子:
•Binary Data in JSON String. Something better than Base64
希望这有帮助。
答案 1 :(得分:0)
public static String BitMapToString(Bitmap bitmap) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] b = baos.toByteArray();
String temp = null;
try {
System.gc();
temp = Base64.encodeToString(b, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
} catch (OutOfMemoryError e) {
baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 50, baos);
b = baos.toByteArray();
temp = Base64.encodeToString(b, Base64.DEFAULT);
Log.e("EWN", "Out of memory error catched");
}
return temp;
}
使用此代码并将图像字符串发送到服务器。希望能帮到你。