无法 post 到 Azure 存储?无效路径错误
Cant post to Azure storage? Invalid Path error
我正在尝试添加我收到的这样的图像。
[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”
您的 await req.Content.ReadAsMultipartAsync(provider);
已传入 provider
,但上面的行表明 provider2
是变量。有没有可能你不小心在别处定义了 provider
而它是无效的?通常当我得到一个 something2 时,它表明我正在努力让某事发挥作用并且害怕失去最初的想法。
如果您改为传入 provider2
,它是否也会失败?
I recieve the error that the path's format is not supported.
由于 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);
}
我正在尝试添加我收到的这样的图像。
[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”
您的 await req.Content.ReadAsMultipartAsync(provider);
已传入 provider
,但上面的行表明 provider2
是变量。有没有可能你不小心在别处定义了 provider
而它是无效的?通常当我得到一个 something2 时,它表明我正在努力让某事发挥作用并且害怕失去最初的想法。
如果您改为传入 provider2
,它是否也会失败?
I recieve the error that the path's format is not supported.
由于 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);
}