【问题标题】:Volley ClientError on Video Upload Post Request视频上传发布请求上的 Volley ClientError
【发布时间】:2022-01-22 04:29:22
【问题描述】:

我正在尝试将视频从 android 上传到 Django 服务器。我可以上传位图,但是当上传视频 mp4 时,代码会导致错误。

调用以下函数 uploadMP4 后,我收到此错误“com.android.volley.ClientError”。虽然,相同的代码在上传位图时效果很好,但在上传视频时,相同的代码会导致错误。

请帮忙。谢谢。

       private void uploadMP4(final Uri videoUri, final String ext) {
    
            if (selected_item_id == null) {
               // return;
            }
    
            String URL = "http://" + getIP() + "/inventory_apis/uploadMP4File";
    
            VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(Request.Method.POST, URL,
                    new Response.Listener<NetworkResponse>() {
                        @Override
                        public void onResponse(NetworkResponse response) {
                            try {
                                JSONObject jresponse = new JSONObject(new String(response.data));
    
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();
                            Log.e("GotError", "" + error.getMessage());
                        }
                    }) {
    
                @Override
                protected Map<String, String> getParams() throws AuthFailureError {
                    Map<String, String> params = new HashMap<>();
    
                    params.put("clubbed_item_id", selected_item_id);
                    return params;
                }
    
                @Override
                protected Map<String, DataPart> getByteData() {
                    Map<String, DataPart> params = new HashMap<>();
                    long filename = System.currentTimeMillis();
                    params.put("video", new DataPart(filename + ".mp4", getFileDataFromDrawable(getApplicationContext(), videoUri), selected_item_id));
    
                    return params;
                }
    
            };
    
            //adding the request to volley
            Volley.newRequestQueue(this).add(volleyMultipartRequest);
        }
    
    public byte[] getFileDataFromDrawable(Context context, Uri uri) {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            try {
                InputStream iStream = context.getContentResolver().openInputStream(uri);
                int bufferSize = 1024 * 10;
                byte[] buffer = new byte[bufferSize];
    
                int len = 0;
                if (iStream != null) {
                    while ((len = iStream.read(buffer)) != -1) {
                        byteArrayOutputStream.write(buffer, 0, len);
                    }
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            return byteArrayOutputStream.toByteArray();
        }

堆栈跟踪的以下详细信息

2021-12-20 20:46:55.461 1563-1563/com.example.skybot D/GotError2: com.android.volley.ClientError
        at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:190)
        at com.android.volley.NetworkDispatcher.processRequest(NetworkDispatcher.java:120)
        at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:87)

【问题讨论】:

  • 您好!我认为您需要提供堆栈跟踪或任何东西以供任何人提供帮助。 :-)

标签: android django android-volley


【解决方案1】:

很抱歉匆忙发布问题。问题不在于上述代码,而在于我使用用户登录授权的服务器端代码。我删除了用户身份验证并添加了我单独的令牌算法代码,上面的代码运行良好。

问题已解决。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    相关资源
    最近更新 更多