簡體   English   中英

將文件從ASP.NET Web API返回到Android

[英]Returning a File from a ASP.NET web api to android

我有一個ASP.Net Web API,該API用於通過Internet編碼為Base64的新文件發送。 為此,我有一個公開的REST服務:

    string imei = ControllerContext.Request.Headers.GetValues("IMEI").FirstOrDefault();
    byte[] FileAsBytes = null;
    String base64 = null;
    var svcs = new CrudService.CrudServiceClient();

    if (svcs.IsDeviceAccepted(imei))
    {
        FileAsBytes = svcs.DownloadSoftwareVersion();
    }

    if(FileAsBytes != null)
    {
         base64 = Convert.ToBase64String(FileAsBytes);
    }

    return base64;

還有一個專用服務CRUD服務,它直接與數據庫和核心層進行通信。

經過一些調試后,我發現該服務返回正確的長度,例如4194304 bytes ,這似乎與文件的大小相對應。 但是在客戶端,我正在AsyncTask內部聯系此服務:

    @Override
    protected String doInBackground(String... params) {
        Log.i("UpdateManager: ", "Inside doInBackground");

        try {

            String imei = params[0];
            String urlString = "http://10.118.18.50/Mobile.RESTPublicService/api/SoftwareUpdate";

            HttpPost post = new HttpPost(urlString);
            post.addHeader("IMEI", imei);
            response = httpClient.execute(post);

            Log.w("Update-Response: ",
                    Integer.toString(response.getStatusLine().getStatusCode())
                            + " " + response.getStatusLine());

            if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {

                is = response.getEntity().getContent();
                IOUtils.copy(is, writer, "UTF-8");

                _log.debug(writer.toString());

                Log.w("CONTENT: ", writer.toString());
                byte[] result = new byte[MAX_FILE_SIZE]; //7242880 b
                result = decodeBase64(writer.toString());

                Log.w("BYTE ARRAY LENGTH: ", Integer.toString(result.length));

            }

        } catch (ClientProtocolException e) {
            Log.e("Client: ", e.getMessage());
            _log.error(e.getMessage());
            return FAILED_DUE_TO_EXCEPTION;
        } catch (IOException e) {
            Log.e("IO: ", e.getMessage());
            _log.error(e.getMessage());
            return FAILED_DUE_TO_EXCEPTION;
        }
        return response.getStatusLine().toString();
    }

這里有趣的一點是result = decodeBase64(writer.toString()); 和decodeBase64方法:

protected byte[] decodeBase64(String s) {
        return Base64.decode(s);
    }

弦樂s是我從web服務獲得:

UEsDBBQACAgIAJteK0IAAAAAAAAAAAAAAAAZAAQAcmVzL2FuaW0vYWN0aXZpdHlmYWRlLnhtbP7KAABdkN9OwjAchc+PbW4YErnwgkRuuSGEek1MDI/SsMkmbF26es8D+AA+hs+hD6Wn0GXKab60/fq/ETK8CyCY4xNgL4TuCUPuyANZkEeyIXvySiaTqnGFbc1RO2MxHr9YU2+PbamRps5cWlmWv1ntKtNQ6ia3psqxXJbOtRul

這不是整個文件,但我可以看到它是base64 encoded

當將此字符串傳遞給decodeBase64方法時,我只會收到以下錯誤消息:

在此處輸入圖片說明

然后,應用程序終止。 這是處理Base64字符串的方法嗎? 有人可以建議我如何從此base64字符串創建文件嗎? 我首先想到的是將其轉換為byte數組,然后創建一個文件。

在我看來,您那里有一個帶引號的字符串-因為"似乎使它引爆了。Web服務返回的是JSON字符串嗎?如果是,則它將用引號引起來,您必須那些關閉以便從base 64解析它。

暫無
暫無

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

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