Java 服务器上未正确读取从应用发送的字节

Java 服务器上未正确读取从应用发送的字节,java,android,file-upload,outputstream,Java,Android,File Upload,Outputstream,我正在使用android库(android上传服务)上传文件。对于所有类型的媒体,它在本地服务器上都可以正常工作,但当我将它发送到Java服务器时,服务器读取最后几个字节。e、 g.对于5 MB的文件,服务器只读取71字节 对于同一台服务器,可以从iOS设备上传文件。上传文件时可能出现什么问题 这是我用来在服务器上上传文件的代码 MultipartUploadRequest request = new MultipartUploadRequest(context, BuildConfig

我正在使用android库(android上传服务)上传文件。对于所有类型的媒体,它在
本地服务器
上都可以正常工作,但当我将它发送到
Java服务器
时,服务器读取最后几个字节。e、 g.对于5 MB的文件,服务器只读取71字节

对于同一台服务器,可以从iOS设备上传文件。上传文件时可能出现什么问题

这是我用来在服务器上上传文件的代码

    MultipartUploadRequest request = new MultipartUploadRequest(context, BuildConfig.SERVER_URL + EndPoints.FILE_UPLOAD);
    if (report.isFileUri()) {
        request.addFileToUpload(new File(report.getContentUri().getPath()).getAbsolutePath(), "file");
    } else {
        request.addFileToUpload(report.getContentUri().toString(), "file");
    } 

    RequestHeaders requestHeaders = new NactaEaseConfig().defaultHeaders(context);
    if (requestHeaders == null) {
        throw new Exception("Required headers are not available. Quitting.");
    }

    request.addHeader(EaseRequest.TOKEN_KEY, EaseTokenManager.getToken(context));

    Map<String, String> headers = requestHeaders.get();
    for (String key : headers.keySet()) {
        request.addHeader(key, headers.get(key));
    }

    request.addParameter("reportedLive", report.getLiveReportingString())
            .addParameter("draftsCreatedDate", report.getFormattedTimeForUpload())
            .addParameter("incident_type", report.getReportType())
            .addParameter("file", report.getFileName())
            .addParameter("incident_location", report.getCompleteAddress())
            .addParameter("app_user_location", report.getLocation())
            .addParameter("show_identity", report.getShareNumberString())
            .addParameter("description", report.getDetails())
            .addParameter("mobile_number", user.getMobileNumber())
            .addParameter("area_name", report.getArea())
            .addParameter("city_name", report.getCity())
            .addParameter("content_type", report.getServiceContentType())
            .setMaxRetries(0);
    request.startUpload();

如果没有其他信息,我首先会怀疑您将以多部分的形式发送内容。接下来有几个问题:

  • 您的Java服务器是否处理多部分内容?如果不是,那可能是你的问题
  • 你能检查一下你提到的71个字节是否真的是你要发送的文件的最后一个字节吗?如果是,那么问题可能是内容以分块编码的方式发送,而服务器只保留最后一个分块

如果您使用的是HTTP而不是HTTPS,那么您可以很容易地使用类似的工具来诊断此问题。也可用于比较iOS和Android应用程序,因为据我所知,它们使用不同的库,可能使用不同的数据编码。

请更具体一些。您应该提供相关的代码片段、布局等。请查看。另外,请仔细查看。添加了代码片段和日志。但当我将其发送到Java服务器时,se会在哪里?为什么要将它与本地服务器进行比较?您能说出您使用的库吗?你为什么强迫我们跟随一个链接?这是我们应用程序使用的服务器。我试图验证本地服务器(PHP)是否工作正常。感谢@Xavier的回复。“分块编码而服务器只保留最后一个分块”的原因是什么?我尝试过两种流模式,分块和固定长度,但服务器得到相同的字节。更可能的原因是您的服务器没有正确处理多部分。使用Charles proxy比较Android和iOS应用程序。好的,我会的。谢谢你抽出时间。
D/UploadService: UploadRequest - null or empty upload ID. Generating it
D/UploadService: UploadRequest - Created new upload request to http://124.109.32.137:8080/NACTA/REST/Communicator/FileUpload with ID: 1034ab15-a10c-41c6-8f36-5697b4dffb81
D/UploadService: MultipartUploadRequest - Auto-detected MIME type for content://com.android.providers.media.documents/document/video%3A146 is: video/mp4
D/UploadService: MultipartUploadRequest - Using original file name: VID_20171216_223940.mp4
I/UploadService: UploadService - Starting service with namespace: com.es.tatheer, upload pool size: 2, 5s idle thread keep alive time. Foreground execution is enabled
D/UploadService: UploadService - Successfully created new task with class: net.gotev.uploadservice.MultipartUploadTask
D/UploadService: FileUploader - Starting upload task with ID 1034ab15-a10c-41c6-8f36-5697b4dffb81
D/UploadService: MultipartUploadTask - 466841
D/UploadService: OkHttpStackConnection - creating new connection
D/UploadService: UploadTask - Broadcasting upload progress for 1034ab15-a10c-41c6-8f36-5697b4dffb81: 103 bytes of 468370
D/UploadService: UploadTask - Broadcasting upload progress for 1034ab15-a10c-41c6-8f36-5697b4dffb81: 361928 bytes of 468370
D/UploadService: MultipartUploadTask - 468323
D/UploadService: UploadTask - Broadcasting upload progress for 1034ab15-a10c-41c6-8f36-5697b4dffb81: 468370 bytes of 468370
D/UploadService: FileUploader - Server responded with HTTP 200 to upload with ID: 1034ab15-a10c-41c6-8f36-5697b4dffb81
D/UploadService: UploadTask - Broadcasting upload completed for 1034ab15-a10c-41c6-8f36-5697b4dffb81
D/UploadService: UploadService - All tasks completed, stopping foreground execution
I/UploadService: UploadService - Service will be shut down in 10000ms if no new tasks are received
D/UploadService: OkHttpStackConnection - closing connection
I/UploadService: UploadService - Service is about to be stopped because idle timeout of 10000ms has been reached
D/UploadService: UploadService - Stopping foreground execution
D/UploadService: UploadService - UploadService destroyed