1

Android アプリから、次の URL を使用して Windows Azure BLOB ストレージからダウンロードしようとしています: http://iclyps.blob.core.windows.net/broadcasts/23_6.mp4

アプリ内からダウンロードすると、結果のファイルが破損しています。デフォルトのブラウザまたは Chrome を使用してダウンロードすると、同じエラーが発生します。Easy Downloader アプリからも、同じエラーが発生します。PC からダウンロードするか、Android デバイス (またはエミュレーター) から Firefox Beta を使用してのみ、ファイルが正しく取得されます。

次のコード (スニペット) を使用します。

    try {
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        //set up some things on the connection
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);

        //and connect!
        urlConnection.connect();

        bis = new BufferedInputStream(urlConnection.getInputStream(), BUFSIZE);
        bos = new BufferedOutputStream(
                context.openFileOutput(TMPFILE, Context.MODE_PRIVATE), BUFSIZE);
        /*
         * Read bytes to the buffer in chunks of BUFSIZE bytes until there is nothing more to read.
         * Each chunk is written to the output file.
         */
        byte[] buf = new byte[BUFSIZE];
        int nBytes = 0;
        int tBytes = 0;
        while ((nBytes = bis.read(buf, 0, BUFSIZE)) > 0) {
            bos.write(buf, 0, nBytes);
            tBytes += nBytes;
        }
        if (tBytes == 0) throw new Exception("no bytes received");
        bos.flush();
        MobyLog.d(TAG, "download succeeded: #bytes = " + Integer.toString(tBytes));
        return true;
    } catch (Exception e) {
        MobyLog.e(TAG, "download failed: " + e);
        context.deleteFile(TMPFILE);    // remove possibly present partial file.
        return false;
    } finally {
        if (bis != null) try { bis.close(); } catch (IOException e) {MobyLog.e(TAG, "bis close exception: " + e); };
        if (bos != null) try { bos.close(); } catch (IOException e) {MobyLog.e(TAG, "bos close exception: " + e); };
    }

ファイルを分析すると、元のファイルの最初の部分 (約 700K) が破損したファイルで何度も繰り返され、無効な mp4 ファイルになっていることがわかります。

ファイルを別の Web サーバー (Apache/IIS) に置き、その場所からファイルをダウンロードすると、正しくダウンロードされます。

Azure からのダウンロードの実行中に同様の問題が発生した人はいますか? 誰かが解決策を提供できますか?

乾杯、ハラルド...

4

1 に答える 1

0

Android アプリでazure-sdk-for-javaを使用してみましたか?

このシナリオは、sdk を使用して BLOB ストレージからカスタム Android アプリに画像をプルおよびプッシュするという点で少し異なります。しかし、基本は同じはずです。

于 2012-09-19T15:22:37.797 に答える