2017-06-24 25 views
0

Azureで非常に簡単なExternalFileTriggerシナリオを実行しています。作成した画像ファイルをonedriveディレクトリから別のディレクトリにコピーしました。Azureを使用するとファイルが破損する外部ファイルのバインド

function.json

{ 
    "bindings": [ 
    { 
     "type": "apiHubFileTrigger", 
     "name": "input", 
     "direction": "in", 
     "path": "Bilder/Org/{name}", 
     "connection": "onedrive_ONEDRIVE" 
    }, 
    { 
     "type": "apiHubFile", 
     "name": "$return", 
     "direction": "out", 
     "path": "Bilder/Minimized/{name}", 
     "connection": "onedrive_ONEDRIVE" 
    } 
    ], 
    "disabled": false 
} 

run.csx

using System; 

public static string Run(string input, string name, TraceWriter log) 
{ 
    log.Info($"C# File trigger function processed: {name}"); 
    return input; 
} 

すべての物事がうまく動作するようですが、私は壊れ、新たな出力画像ファイル。サイズはほぼ倍の大きさです。 エンコーディングを見ると、元のファイルはANSIにありますが、Azure関数の新しい生成ファイルはUTF-8です。 ソースコードがUTF-8のときにテキストファイルを使用しているときにうまくいきます。

Azureを強制的にバインドしてExternalFileTriggerにANSIを使用させることはできますか?またはこれを解決する方法?

public static async Task Run(Stream input, Stream output, string name, TraceWriter log) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     input.CopyTo(ms); 
     var byteArray = ms.ToArray(); 
     await output.WriteAsync(byteArray, 0, byteArray.Length); 
    } 
    log.Info($"C# File trigger function processed: {name}"); 
} 

:あなたがあるとして、ファイルをコピーするか、ファイルの内容によりきめ細かいバイナリの操作を行いたい場合は

答えて

0

、私はStreamタイプの代わりに、あなたの入力と出力のバインディングのstringを使用することをお勧めしますfunction.jsonに結合出力に含まを変更します。

"name": "output", 

この関数は、変換せずに、ファイルの正確なバイナリコピーを行います。

External File bindingsでバインディングに使用できるその他のタイプを確認することができます(「使用法」を参照)。

+0

ストリームを使用する場合、ターゲットファイルは0バイト大きくなります。私は運がないリターンの前にポジションを0にしようとしました。 –

+0

@MartinHolmはい、実際に動作するサンプルを投稿 – Mikhail

+0

素晴らしい!それを試して、あなたが言ったように、これは正確なバイナリコピーになります。ありがとうございます。 –

関連する問題