簡體   English   中英

從應用程序發送的字節未在服務器上正確讀取

[英]Bytes sent from app are not read properly on server

我正在使用這個庫 (android-upload-service) 從 Android 上傳文件。 它在local server適用於所有類型的媒體,但是當我將它發送到Java Server ,服務器讀取最后幾個字節。 例如,對於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();

這些是我上傳文件時得到的日志。

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

如果沒有其他信息,我首先會懷疑您將內容作為多部分發送。 那么幾個問題:

  • 您的 Java 服務器是否處理多部分內容? 如果沒有,那可能是你的問題。
  • 您能檢查一下您提到的 71 個字節是否真的是您發送的文件的最后一個字節嗎? 如果是,那么問題可能在於內容是作為分塊編碼發送的,而服務器只保留最后一個塊。

鑒於您使用的是 HTTP 而不是 HTTPS,您可以輕松使用Charles Proxy 之類的工具進行診斷。 也可用於比較您的 iOS 和 Android 應用程序,據我所知,它們使用不同的庫,並且可能使用不同的數據編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM