ローカルコマンドラインクライアントからweb-apiを介してAzureストレージにファイルをアップロードしようとしています。 私はそのためにAzure Web-Siteを使用しています。クライアントとの作業は問題ではありません。そして、私はすべてローカルでうまく動作しています。ここでは、ウェブAPIコードは次のとおりです。私はローカルで実行したときにローカルファイルシステムにアクセスせずにWebApi経由でAzure Blobストレージにファイルをアップロード
public async Task<HttpResponseMessage> PostUpload()
{
// need a local resource to store uploaded files temporarily
LocalResource localResource = null;
try
{
// Azure web-site fails here
localResource = RoleEnvironment.GetLocalResource("TempStorage");
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "Unable to get access to local resources");
}
var provider = new MultipartFormDataStreamProvider(localResource.RootPath);
// Read the form data.
await Request.Content.ReadAsMultipartAsync(provider);
// snipped validation code
var container = // code to get container
foreach (var fileData in provider.FileData)
{
var filename = GetBlobName(fileData);
var blob = container.GetBlockBlobReference(filename);
using (var filestream = File.OpenRead(fileData.LocalFileName))
{
blob.UploadFromStream(filestream);
}
File.Delete(fileData.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
すべてが正常に動作しますが、Azureのウェブサイトを持っていないので、すぐに私はアズールでウェブサイトを展開して、私は、アップロードすることはできませんLocalResourceへのアクセス。 Azure Web-Roleに切り替える必要があります。私は切り替えることができますが、ローカルファイルシステムにアクセスすることは私を一緒に気にしています。
LocalResourceは、MultipartFormDataStreamProvider()のインスタンスに必要です。そして、私はWebApiにファイルをアップロードするための代替方法を見つけられませんでした。私の計画はchannel through upload directly to Azureで、ローカルのHDDに何も保存することはありませんでした。
ファイルをアップロードする方法はありますか?
p.s.私はusages of Shared Access Signaturesを見てきました。私は、クライアントアプリケーションに署名付きのURLを与え、クライアントがAzure Blogに直接アップロードできるようにしています。しかし、私は、クライアントにシグネチャを渡すことで、どれくらい安全になるのか、それほど快適ではないのかはまだ分かりません。現時点では、クライアントは非常に敵対的な環境で実行され、クライアントから戻ってくるものは何も信頼できません。
UPD私の最終的な解決策は、サーバーで発行され、クライアントに渡された書き込みのみの共有アクセス署名を使用することでした。クライアントはAzureに直接ファイルをアップロードします。このようにして、アップロードされたファイルを管理することで多くの手間を省きます。そして、ここに私の解決のmore detailed descriptionがあります。
"localResource = RoleEnvironment.GetLocalResource(" TempStorage ")" –
あなたはREST APIを快適に使用できますか? –
@BrianDishaw例外は、「LocalResource、System.Runtime.InteropServicesを取得できません。SEHException(0x80004005):外部コンポーネントが例外をスローしました。 "また、このページ(http://msdn.microsoft.com/en-us/library/windowsazure/ee758708.aspx)では、ローカルリソースはWebおよびWebサイトではなく、ワーカーの役割 – trailmax