0

私はこのように受け取っているイメージを追加しようとしています。Azureストレージへのポストポスト?無効なパスエラー

[FunctionName("Imageupload")] 
public static async System.Threading.Tasks.Task<HttpResponseMessage> RunAsync([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "HttpTriggerCSharp/name/{name}")]HttpRequestMessage req, string name, TraceWriter log) 
{ 
    //Check if the request contains multipart/form-data. 
    if (!req.Content.IsMimeMultipartContent()) 
    { 
     return req.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
    } 

    var storageConnectionString = "XXXXXXXXXXXXXXXXXXX"; 

    var storageAccount = CloudStorageAccount.Parse(storageConnectionString); 
     log.Info(storageConnectionString); 
    var blobClient = storageAccount.CreateCloudBlobClient(); 

    // Retrieve a reference to a container. 
    CloudBlobContainer container = blobClient.GetContainerReference("temporary-images"); 

    // Create the container if it doesn't already exist. 
    container.CreateIfNotExists(); 

    //Retrieve reference to a blob named "myblob". 
    CloudBlockBlob blockBlob = container.GetBlockBlobReference("images"); 

    try 
    { 
     string root = blockBlob.Uri.AbsoluteUri; 
     var provider2 = new MultipartFormDataStreamProvider(root); 
     await req.Content.ReadAsMultipartAsync(provider); 
    } 
    catch (StorageException e) 
    { 
     return req.CreateErrorResponse(HttpStatusCode.NotFound,e.Message); 
    } 
} 

私がチェックしているとおり、使用しているパスは正しいですし、ストレージコンテナを指しています。

どのように受信した画像をAzureストレージに送ることができますか?

パスの形式がサポートされていないというエラーが表示されます。

私のパスは次のようになります。「https://XXXXXXXXXXX.blob.core.windows.net/temporary-images/images

+0

エラーメッセージが表示されますか? – Guffa

+0

与えられたパスのフォーマットはサポートされていませんエラーです。 –

答えて

0

パスの形式がサポートされていないというエラーが表示されます。

MultipartFormDataStreamProviderは、ローカルファイルパスをパラメータとして要求するため、blobアドレスhttp/httpsは無効です。

複数のファイルをAzureストレージコンテナにアップロードする場合は、req.Content.ReadAsMultipartAsync();blockBlob.UploadFromStream(stream);を使用してファイルをAzureストレージBLOBにアップロードしてみてください。私はデモを行う、それは私の側で正しく動作します。

if (!req.Content.IsMimeMultipartContent()) 
{ 
    return req.CreateResponse(HttpStatusCode.UnsupportedMediaType); 
} 
var storageConnectionString = "connection string"; 
var storageAccount = CloudStorageAccount.Parse(storageConnectionString); 
log.Info(storageConnectionString); 
var blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer container = blobClient.GetContainerReference("temporary-images"); 
container.CreateIfNotExists(); 
try 
{ 
    var filesReadToProvider = await req.Content.ReadAsMultipartAsync(); 
    foreach (var stream in filesReadToProvider.Contents) 
    { 
     var blobName = stream.Headers.ContentDisposition.FileName.Trim('"'); 
     CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);   
     blockBlob.UploadFromStream(stream.ReadAsStreamAsync().Result); 

    } 

} 
catch (StorageException e) 
{ 
     return req.CreateErrorResponse(HttpStatusCode.NotFound, e.Message); 
} 
0

あなたawait req.Content.ReadAsMultipartAsync(provider);は、渡されたproviderを持っていますが、上記の行はprovider2が変数であることを示します。他の場所で誤ってproviderを定義している可能性がありますか?それは無効ですか?通常、何かが得られたら、私は何かを得るために努力しており、最初のアイデアを失うことを恐れていることを示しています。

代わりにprovider2を渡した場合、それも失敗しますか?

関連する問題