发送Volley Multipart帖子图片和Params请求时收到错误500

如何解决发送Volley Multipart帖子图片和Params请求时收到错误500

我正在使用发送MultipartRequest Volley Post请求,我收到服务器错误

BasicNetwork.performRequest:意外的响应代码500

服务器正在 Postman 上接收请求,没有问题。

此外,我使用http://httpbin.org/post来测试图像和参数是否已附加,对我而言一切正常。谁能帮我这个。尝试搜索几个小时仍无法解决此问题。

Httpbin响应

{
   "args":{
      
   },"data":"","files":{
      "image":"data:application/octet-stream;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCAcCBDgDASIAAhEBAxEB/8QAHwABAAICAwEBAQEAAAAAAAAAAAgJBwoeBQYDAgEL/8QAgRAAAAYCAQEEAgUQEREEBAAfAAECAwQFBgcIEQkSEyEUMRUiQVeWFhcYGTI4UWFxdpKxtcHV1iM2N1NWdXeBkaGms7S20dPUCiQzNDU5Qlhyc3STlZey4fBSVJTxGiVigrfCQ2N4hcXSJlWGotcnREZkZ4SYw8TGKTpFsgiDh/L/xAAeAQEAAAcBAQEAAAAAAAAAAAAAAQMEBQYHCAIJCv/EAIURAAEDAgICBRENDwoPDAgGAwABAgMEBQYREiEHEzFRYRQWFxhBVFVWcZOUlbHR09TwCAkVIjI1U3SBkcHS1RkzN1JXcnWSlqGlsrO01iM2QmJzdqO1wvEnOENHZWZnaISGpKfh5OckKDRERWNkd4KiprYlOUiDh7fj5SZGhcTi8njD5v/aAAwDAQACEQMRAD8A3OAH4ccbaQpx1xDTaS6qW4pKEJL1dVKUZJIuvl5mOMmxr1qShE+GtajJKUplMKUpR+RElJLMzMz8iIi6mAOYAAAAD5OvssJ777zTKOpF33XENp6n6i7yzSXU/cLqPi3PgurS21NIoUKPoltuSytajIjMySlKzUZ9CM/Ij8iMwBywAAAAAAAAGANtcpNCaNsItTtDZNBi9vMbQ8xUvuuyrLwF9O5IdhQmpD7DKiPqlx5CEqT5pMy8wBn8B4fXmysD2vjUbL9dZRUZbjkta2mrOnlJkMpfa6eLHfSXR2PJb7yTWw+ht1JKSZp6KIz9wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwTsjk3oPUV9ExjY+1MRxPIZiGXWqizskJnIZkd3wHpTDSXVQ2niWlba5XhEttSXE9WzJR5fr7+ktqWPkdbbV06hlwisY1xFlsPVr0BTfilLbmNrUwqP4ZGs3SX3CSRmZl0MAduAj7ivKzjpm+Znr3Fdv4Vd5ib7kVmkh2zSpEuU0ruuRoLiiTHmvkr2pNRXnVrPybJR+QkEAAAAAAAAAACuveHaaaF0Fsi91fmWObOm5Bj5sFMk0FJjsurc9Ib8RBxn5uV10lZEn5rxIjRkfqIy8wBYoAx5qfZdFuLXWKbNxmNZw6HMK47OsjXLMaPaNRylSIndmMRJc6M26bkZaiS1LeT3DSZqJrmlPnducg9N6JiwZW1c9o8Q9k+97HRZ7yl2E5KDNK3I0CMh6W60hRGlTqWvDJRGnvd4jIAZlAYt1XurVu7aV6/1bmtLmNbFdSxNcq5HefgvLI1IanQ3Utyoi1klRoJ9lBL7qu6Z90+mUgAAAAAAET+UHMTWXE2NjEvY9RmfWxC/jBUDU217rqbsGDdKxoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf//Z"
   },"form":{
      "email":"emirdeed@gmail.com","emailText":"Hallo,\nes ist jetzt ganz einfach,selbst aktiv etwas gegen das Insekten- und Bienensterben und f?r mehr Biodiversit?t zu tun. Privaten G?rten und Balkonen kommt dabei eine sehr wichtige Aufgabe zu,z. B. durch die richtige Auswahl der Pflanzen. Im Anhang siehst du den ?koscan von meinem Garten,der auf www.example.de erstellt wurde. Hier kannst Du ganz einfach in der Pflanzensuche insektenfreundliche Pflanzen finden und Pflanzen per Foto bestimmen. Die Anwendung ist ?brigens kostenlos.\nVielleicht hast du ja Lust,deinen eigenen Garten auch mal zu checken.\n\nViele Gr??e,\n","fromMail":"example@example.com","fromName":"Amir","toName":"receiver name"
   },"headers":{
      "Accept-Encoding":"gzip","Authorization":"Bearer BAN4vrbQLvp6J5xLVx_VEY1_Pa1lNqhtLUqwRWGrvQbUh2FEwY7YQOSSAm2Ptj6nDgSltyP2qhd_7f5U6A0hl1gbm6m-1gt6qWQuM1PTkr_BqfM9KgsMTv-pECNHvcYqkytTRbC8WzgA32WDN9u3_VE_2Vqv7SEXJtd946bMFKslp_iLQfVxlalGXEm_XdonJgBGEzH83tdeJEqQ5GnjzE0HEmHoGRek911j6TwL0fUWDfXWSSW057EeKEB5krvqFdZJSSavdWeP4UM0E7PnubDieR7dSkBpk5JX8MRJ7dx0IgnWjFavTwakQdtwdqJDVzm12IHhsmOZk45YBAoc0A","Content-Length":"343844","Content-Type":"multipart/form-data; boundary=zoPsBEe7D03JvmrpnkldtWEY7g7cNl6QiSVpjqIE; charset=US-ASCII","Host":"httpbin.org","User-Agent":"Dalvik/2.1.0 (Linux; U; Android 9; AOSP on IA Emulator Build/PSR1.180720.117)","X-Amzn-Trace-Id":"Root=1-5f9722f1-20f1e81d2b9a54616d2090d7"
   },"json":null,"origin":"194.95.1.95","url":"http://httpbin.org/post"
}

发送排球方法

private void emailFile(Bitmap bitmap) {
        File savedPdfFile = new File(getActivity().getFilesDir(),file_name_path);

         String scanEmailUrl = "https://examplebackend.sslbeta.de/api/AccountAPI/sendScanMail";
        //String scanEmailUrl = "http://httpbin.org/post";

        File file = bitmapToFile(bitmap,"example_ecoscan");

        // Add binary body
        if (file != null) {
            HashMap<String,String> params = new HashMap<String,String>();

            params.put("email","emirdeed@gmail.com");
            params.put("emailText",emailMsgEdtText.getText().toString());
            params.put("fromMail","example@example.com");
            params.put("fromName","Amir");
            params.put("toName","receiver name");

            MultipartRequest myRequest = new MultipartRequest(getActivity(),file,params,scanEmailUrl,new Response.Listener<String>(){

                @Override
                public void onResponse(String response) {
                    Log.d("response",response);
                    Toast.makeText(getContext(),"email sent",Toast.LENGTH_SHORT).show();
                }
            },new Response.ErrorListener(){

                @Override
                public void onErrorResponse(VolleyError e) {
                    Log.d("ReadRdaJSONFeedTask",e.getLocalizedMessage() == null ? "" : e.getLocalizedMessage());
                    Toast.makeText(getContext(),e.getLocalizedMessage() == null ? "" : e.getLocalizedMessage(),Toast.LENGTH_SHORT).show();
                }

            });

            myRequest.setRetryPolicy(new DefaultRetryPolicy(10000,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));

            RequestQueueSingleton.getInstance(getContext()).addToRequestQueue(myRequest);

        }

    }

MultipartRequest类

public class MultipartRequest extends Request<String> {

    private multipartentity entity = new multipartentity();

    private static final String FILE_PART_NAME = "image";

    private final Response.Listener<String> mListener;
    private final File file;
    private final HashMap<String,String> params;
    private Context context;

    public MultipartRequest(Context context,File file,HashMap<String,String> params,String url,Response.Listener<String> listener,Response.ErrorListener errorListener) {
        super(Method.POST,url,errorListener);

        mListener = listener;
        this.file = file;
        this.params = params;
        this.context = context;
        buildmultipartentity();
    }

    private void buildmultipartentity() {
        entity.addPart(FILE_PART_NAME,new FileBody(file));
        try {
            for (String key : params.keySet()) {
                entity.addPart(key,new StringBody(params.get(key)));
            }
        } catch (UnsupportedEncodingException e) {
            VolleyLog.e("UnsupportedEncodingException");
        }
    }

    @Override
    public String getBodyContentType() {
        return entity.getContentType().getValue();
    }

    @Override
    public byte[] getBody() throws AuthFailureError {
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        try {
            entity.writeto(bos);
        } catch (IOException e) {
            VolleyLog.e("IOException writing to ByteArrayOutputStream");
        }
        return bos.toByteArray();
    }

    /**
     * copied from Android StringRequest class
     */
    @Override
    protected Response<String> parseNetworkResponse(NetworkResponse response) {
        String parsed;
        try {
            parsed = new String(response.data,HttpHeaderParser.parseCharset(response.headers));
        } catch (UnsupportedEncodingException e) {
            parsed = new String(response.data);
        }
        return Response.success(parsed,HttpHeaderParser.parseCacheHeaders(response));
    }

    @Override
    public Map<String,String> getHeaders() throws AuthFailureError {
        ApplicationUser user = PreferencesUtility.getUser(context);
        Map<String,String> headers = new HashMap<>();
        headers.put("Authorization","Bearer " + user.getToken());
        return headers;
    }

    @Override
    protected void deliverResponse(String response) {
        mListener.onResponse(response);
    }
}

Postman工作示例,httpbin.org/post回复

{
    "args": {},"data": "","files": {
        "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArsAAAJWCAYAAABYuU/eAACAAElEQVR42uy9CXRc9ZXue1TzrHmWJVnzPM/zPA+lWbJkTZblkcHGNsYYG4PBGEMcx3EIcAmhadrX1+1LOzQhPJrQhE7oNJ2mOwmXy6K5PB6LTnNzeTwvlheL5aW133//zzlVp0pVkmzLtiTvb629qlSSSqoqVelX+3z724JAIpFIJBKJRCKRSCQSaVVIRXcBiUQikUgkemmtAa5GKpWiSCQSiUQikUikNQG7Og+wS8BLIpFIJBKJRFpz4EuwSyKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRrlOY5WuQTkkkEolEIpFIpDUllQS7FgJeEolEIpFIJNJahl6CXRKJRCKRSCQSiUQikUgkEolEIpFIJBKJRCKRSCQSiUQikUgk0s0Q+lb9WIWximAVxSqWVRyrBJ1Ol2az2UqiwoLb4mIiNsTGRm6Njo64MyIscGeQv++s2WwY1+nUw2qdepB97Qajkdcwq16NRtPErqOMVQ6rFOl6w6Sfp6O7nkQikUgkEol0zUpLE3RBQaYIBqFZDDzr1Gp1LwPTMZNJP2s1G3f7Wi2P2CyWp6xW44s2m/mcr6/tnL+/7VyAn/WCv6/t1eBAv7ciw4PfXx8d8Xn8+shvYqMj5iLCgiE0JABCgvyBfR4C/G1X/Hwtl31tlktY7Pwlf1/rN/5+Njz/Z5vF/JnRaPhQp9W85+Pj84ZKpTrHfrWnWB1jtZ/VLKteVjWsshcwpULYjmYVIsGxRQJkFT2yJBKJRCKRSLeHVFarNchisWRYDIYao9HY72+z7IwIDz0WHBxw1mYzvWOxGD+0mE1fmkzGb80m45zFbAR2GsstWFnZrGZeDFSBASr4sWIQDL6+Fn6ZlX3ObDKA0agHvV4Hep2WlY6fN7AyGvSsDGAyimU0Os+b8WexslnxZxnZ9Rjx8ivs+77V6TRfazTqLxn8fszqfXZb3mb1CqsX2MdnWCEM72Y1ycrOqo5VgSB2iBGCgwTqdpnIJBKJRCKtCWEubIRWqy0ymw1jVpPhgM1iOmO1mi4yGH3Pz2b5jIHqV4H+vt8GBfozSDWLYGmSABSB1AGjenaqLINLIcRqtRrQapylUWOpQc1KPFXxU14aL6X4HL8+ViIos9JrRXDm8MxrTqfVXGH1LatL7Hu+Yj/3SwbEnxsM+g/YbX7bbDScZd93UqBvU/cR3Vc0/+4pAFoqt0pFUqUqPKqDr/qsijqbokqVKlWqWgT0RgjwbSfANEq8IdKdTAB8n/ge9QapStWd8bxXz2VVqlSpUtXi3xDNrUqVKlWq7pD6/zIOZQjiDhPqAAAAAElFTkSuQmCC"
    },"form": {
        "email": "example@gmail.com","emailText": "some text","fromMail": "example@example.com","fromName": "Amir","toName": "receiver name"
    },"headers": {
        "Accept": "*/*","Accept-Encoding": "gzip,deflate,br","Authorization": "Bearer UkNQV8NSJV7DIZzVhMHXJvH2SCdTtdpl0SVCBP5tj3cSgNnAgdhBYdA8HFb0NUHZYzWkYH0Tf3bdTLU5isyJTcWCPFIQQhDHG_SMkO_WIszDl0T0mYj-kkSyErz4nZtSKZy8I_fnbFyjAuDEEW1khdt1ct1f-Dp5t-vyfHj9hlgyJlyF3d5iroYsLRRbu_gTWD39sWiqr1T31aZTst5kMIz6M9KOtvGAVZIep7soY8LnIN59aMC0ShpmmooIZh21hYhaGGD2NRivZnVHd--dlWUYeQSMayqtTUEF4NqpjcHmLJvK61ZwobM-7ORwNc4R5iBS-6PNVKbrmsE13BGQNw","Content-Length": "178556","Content-Type": "multipart/form-data; boundary=--------------------------295330887852083842487601","Host": "httpbin.org","Postman-Token": "7a09709e-996b-47e6-9366-329f4c55bfc9","User-Agent": "PostmanRuntime/7.26.5","X-Amzn-Trace-Id": "Root=1-5f97d311-48bdfe9b61cff3977e2788a8"
    },"json": null,"origin": "194.95.1.95","url": "http://httpbin.org/post"
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?