通过PUT方法使用Volley API上传文件

时间:2016-11-10 08:57:09

标签: android android-volley

我一直在寻找使用PUT方法使用Volley API上传文件的方法。到目前为止我所看到的都是通过MultiPart POST方法,这不适用于我的情况。

假设我无法改变服务器端的任何内容,而且我仍然坚持使用PUT。如何在凌空中实现这一目标?

请注意,我只有url在哪里上传文件和文件本身。

2 个答案:

答案 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;
        }