Android大文件作为字节数组上传到Restful WCF服务,给出错误的请求



我在尝试使用 HTTPPost 将包含转换为字节数组的图像的 zip 文件上传到 restful wcf 服务时遇到问题。字节数组被编码到 BASE64 中,括在 JSON 对象中,并使用带有 2 个参数的 StringEntity 发送。大约 6KB 的文件被上传而没有任何缺陷,但超过 6KB 的文件没有发送,我收到一个错误请求 - 400 状态代码。以下代码用于上传文件:

文件文件 = 新文件(dir, "file.zip");

            byte[] buf = new byte[10240000];
            fis = new FileInputStream(file);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            for (int readNum; (readNum = fis.read(buf)) != -1;) {
                bos.write(buf, 0, readNum); 
                Log.v("read : buf ", buf + " : " + readNum + " bytes");
            }
            byte[] bytes = bos.toByteArray();
            imgData = Base64.encodeToString(bytes, Base64.DEFAULT);
            JSONObject sendData=null;
            Log.d("Image Data length", imgData.length()+"");
            Log.d("Image data ", imgData);
            try {
                sendData= new JSONObject();
                sendData.put("_binaryData", imgData);
                sendData.put("_fileName", "fileName");
                sendData.put("userid", userID);
                int len = imgData.length();
                int l=sendData.toString().length();
                entity = new StringEntity(sendData.toString());
            } catch (Exception e) {
                e.printStackTrace();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
            // Send request
            int len = imgData.length();
            request.setHeader("Accept", "application/json");
            request.setHeader("Content-type", "application/json");
            request.setHeader("Connection", "Keep-Alive");
            request.setParams(httpParameters);
            DefaultHttpClient httpClient = new DefaultHttpClient();
            request.setEntity(entity);
            HttpResponse response = httpClient.execute(request);
            HttpEntity responseEntity = response.getEntity();
            String str=response.getStatusLine().getReasonPhrase();
            int i=response.getStatusLine().getStatusCode();
            Log.v("ReasonPhrase :: StatusCode",str+" "+i);
            int contentLength = (int) responseEntity.getContentLength();
            char[] buffer = new char[(int) responseEntity
                    .getContentLength()];
            InputStream stream = responseEntity.getContent();

请帮助我解决这个问题。

如果具有 <6k 字节的消息可以通过,但具有>6k 的消息不能通过,我会查看客户端和主机的限制,例如:

    MaxBufferSize 
    MaxBufferPoolSize
    MaxReceivedMessageSize 

您没有说您是否可以控制主机服务器设置,但您可以增加和减少前面提到的项目的限制。如有必要,您可以将它们设置为 Integer.Max,该大小允许文件上传> 1 GB。

最新更新