2016-07-01 8 views
1

私はazure(Webサービス+ファイルストレージサービス)で私のアプリケーションをホストしています。Android | Fresco/FrescoLib + Azure

私はアプリケーションでFresco(SimpleDraweeView)を使用したいと考えています。問題は、空白のストレージがプライベートであるため、ユーザーに直接URLを与えることができないことです。

私ができる唯一のことは、イメージをバイト配列(私のWebサービスを使用)として取得し、このバイト配列をアンドロイドクライアントに転送することです。

ダイレクトリンクの代わりにバイト配列でsimpleedraweeviewを使用するにはどうすればよいですか?

ユーザーが私にイメージIDを与え、エンドポイントがバイト配列を返すWebサービスでエンドポイントを設定しようとしましたが、このエンドポイントをsimpleedraweeview.setImageUrlメソッドのURLとして使用しようとしましたが、運がない。

答えて

0

私の経験によれば、Azure File Storgaeでホストされているイメージにアクセスして応答するプロキシサービスとしてWebアプリケーションを作成し、andoirdに戻す必要があるようです。

あなたはJava Web開発者であると仮定して、簡単な方法はcreate a Java web app in Azure App Serviceです。次にJava WebアプリケーションのJavaサーブレットを作成し、How to use File Storage from Javaの記事を参照してストリームをhttpにパイプするサーブレットの応答は、以下のサンプルコードを参照してください。

private static final String storageConnectionString = 
      "DefaultEndpointsProtocol=http;" + 
        "AccountName=your_storage_account_name;" + 
        "AccountKey=your_storage_account_key"; 
private CloudFileClient fileClient; 

/** 
* @see HttpServlet#HttpServlet() 
*/ 
public PipeStream4FileStorage() { 
    super(); 
    try { 
     CloudStorageAccount storageAccount = CloudStorageAccount.parse(storageConnectionString); 
     fileClient = storageAccount.createCloudFileClient(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

/** 
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
*/ 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String dirName = request.getParameter("dir"); 
    String fileName = request.getParameter("file"); 
    OutputStream outStream = response.getOutputStream(); 
    try { 
     // Get a reference to the file share 
     CloudFileShare share = fileClient.getShareReference("sampleshare"); 
     //Get a reference to the root directory for the share. 
     CloudFileDirectory rootDir = share.getRootDirectoryReference(); 
     //Get a reference to the directory that contains the file 
     CloudFileDirectory sampleDir = rootDir.getDirectoryReference(dirName); 
     //Get a reference to the file you want to download 
     CloudFile file = sampleDir.getFileReference(fileName); 
     //Write the stream of the file to the httpServletResponse. 
     file.download(outStream); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } catch (StorageException e) { 
     e.printStackTrace(); 
    } 
} 

キー機能download(OutputStream outStream)については、javadocを参照してください。

次にSimpleDraweeViewの画像URLを次のように設定する必要があります。

Uri uri = Uri.parse("https://<your-webapp-name>.azurewebsites.net/<servlet-url-mapping-name>?dir=<dir-name>&file=<file-name>"); 
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view); 
draweeView.setImageURI(uri); 
+0

ファイルを適切なコンテンツタイプ(image/jpeg)で返さなければなりませんでした。ありがとう:) –

関連する問題