我一直在寻找使用PUT方法使用Volley API上传文件的方法。到目前为止我所看到的都是通过MultiPart POST方法,这不适用于我的情况。
假设我无法改变服务器端的任何内容,而且我仍然坚持使用PUT。如何在凌空中实现这一目标?
请注意,我只有url在哪里上传文件和文件本身。
答案 0 :(得分:0)
使用PUT方法的基本概念
url = "your URL";
StringRequest putRequest = new StringRequest(Request.Method.PUT, url,
new Response.Listener<String>()
{
@Override
public void onResponse(String response) {
// response
Log.d("Response", response);
}
},
new Response.ErrorListener()
{
@Override
public void onErrorResponse(VolleyError error) {
// error
Log.d("Error.Response", response);
}
}){
@Override
protected Map<String, String> getParams()
{
Map<String, String> params = new HashMap<String, String> ();
params.put("name", "file_name");
return params;
}
}; RequestQueue queue = Volley.newRequestQueue(this);
queue.add(putRequest);
答案 1 :(得分:0)
为了上传图像文件,将以下函数添加到您的 StringRequest 对象中。 这里 outputFileUri 是你要上传的文件的 Uri。
@Override
public String getBodyContentType() {
return "image/jpeg";
}
@Override
public byte[] getBody() throws AuthFailureError {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
InputStream inputStream = mContext.getContentResolver().openInputStream(outputFileUri);
byte[] b = new byte[8192];
for (int readNum; (readNum = inputStream.read(b)) != -1; ) {
bos.write(b, 0, readNum);
}
inputStream.close();
return bos.toByteArray();
} catch (Exception e) {
Log.d(TAG, e.toString());
}
return null;
}