C# 通过web api ASP.NET framework web应用程序c将图像/文件上载到blob azure#
获取http 400,尝试将图像上载到blob时,使用postman测试api:C# 通过web api ASP.NET framework web应用程序c将图像/文件上载到blob azure#,c#,azure,asp.net-web-api,file-upload,azure-storage-blobs,C#,Azure,Asp.net Web Api,File Upload,Azure Storage Blobs,获取http 400,尝试将图像上载到blob时,使用postman测试api: [Route("~/api/myAPI/testapi")] [HttpPost] public async Task<HttpResponseMessage> testapi() { String strorageconn = System.Configuration.ConfigurationManager.AppSettings.Get("MyBlo
[Route("~/api/myAPI/testapi")]
[HttpPost]
public async Task<HttpResponseMessage> testapi()
{
String strorageconn = System.Configuration.ConfigurationManager.AppSettings.Get("MyBlobStorageConnectionString");
Dictionary<string, object> dict = new Dictionary<string, object>();
try
{
// Create a CloudStorageAccount object using account name and key.
// The account name should be just the name of a Storage Account, not a URI, and
// not including the suffix. The key should be a base-64 encoded string that you
// can acquire from the portal, or from the management plane.
// This will have full permissions to all operations on the account.
// StorageCredentials storageCredentials = new StorageCredentials(myAccountName, myAccountKey);
//CloudStorageAccount cloudStorageAccount = new CloudStorageAccount(storageCredentials, useHttps: true);
// Parse the connection string and return a reference to the storage account.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(strorageconn);
// If the connection string is valid, proceed with operations against Blob
// storage here.
// ADD OTHER OPERATIONS HERE
// Create the CloudBlobClient that represents the
// Blob storage endpoint for the storage account.
CloudBlobClient cloudBlobClient = storageAccount.CreateCloudBlobClient();
// Create a container called 'quickstartblobs' and
// append a GUID value to it to make the name unique.
CloudBlobContainer cloudBlobContainer = cloudBlobClient.GetContainerReference("images");
//"quickstartblobs" + Guid.NewGuid().ToString());
await cloudBlobContainer.CreateAsync();
if (cloudBlobContainer.CreateIfNotExists())
{
cloudBlobContainer.SetPermissions(
new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
});
}
// Set the permissions so the blobs are public.
/* BlobContainerPermissions permissions = new BlobContainerPermissions
{
PublicAccess = BlobContainerPublicAccessType.Blob
};
await cloudBlobContainer.SetPermissionsAsync(permissions); */
// Create a CloudBlobClient object from the storage account.
// This object is the root object for all operations on the
// blob service for this particular account.
//CloudBlobClient blobClient = cloudStorageAccount.CreateCloudBlobClient();
var httpRequest = HttpContext.Current.Request;
foreach (string file in httpRequest.Files)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created);
var postedFile = httpRequest.Files[file];
// Get a reference to a CloudBlobContainer object in this account.
// This object can be used to create the container on the service,
// list blobs, delete the container, etc. This operation does not make a
// call to the Azure Storage service. It neither creates the container
// on the service, nor validates its existence.
string imageName = "images" +serverTime.Year.ToString() + serverTime.Month.ToString() + serverTime.Day.ToString() +
serverTime.Hour.ToString() + serverTime.Minute.ToString() + serverTime.Second.ToString ()
+ postedFile.FileName.ToLower();
//CloudBlobContainer container = blobClient.GetContainerReference(imageName.ToLower());
/*if(await container.CreateIfNotExistsAsync())
{
await container.SetPermissionsAsync(
new BlobContainerPermissions {
PublicAccess = BlobContainerPublicAccessType.Blob
}
);
} */
if (postedFile != null && postedFile.ContentLength > 0)
{
int MaxContentLength = 1024 * 1024 * 1; //Size = 1 MB
IList<string> AllowedFileExtensions = new List<string> { ".jpg", ".gif", ".png" };
var ext = postedFile.FileName.Substring(postedFile.FileName.LastIndexOf('.'));
var extension = ext.ToLower();
if (!AllowedFileExtensions.Contains(extension))
{
var message = string.Format("Please Upload image of type .jpg,.gif,.png.");
dict.Add("error", message);
return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
}
else if (postedFile.ContentLength > MaxContentLength)
{
var message = string.Format("Please Upload a file upto 1 mb.");
dict.Add("error", message);
return Request.CreateResponse(HttpStatusCode.BadRequest, dict);
}
else
{
var filePath = HttpContext.Current.Server.MapPath("~/imagesfiles/uploads" + postedFile.FileName.ToLower() + extension.ToLower());
postedFile.SaveAs(filePath);
//CloudBlockBlob cloudBlockBlob = container.GetBlockBlobReference(imageName);
// Get a reference to the blob address, then upload the file to the blob.
// Use the value of localFileName for the blob name.
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(imageName.ToLower());
// create a blob in container and upload image bytes to it
//var blob =container.GetBlobReference(postedFile.FileName);
await cloudBlockBlob.UploadFromFileAsync(postedFile.FileName);
//await cloudBlockBlob.UploadFromFileAsync(filePath);
}
}
var message1 = string.Format("Image Updated Successfully.");
return Request.CreateErrorResponse(HttpStatusCode.Created, message1); ;
}
var res = string.Format("Please Upload a image.");
dict.Add("error", res);
return Request.CreateResponse(HttpStatusCode.NotFound, dict);
}
catch (Exception ex)
{
HttpResponseMessage response2 = Request.CreateResponse(HttpStatusCode.BadRequest, ex.InnerException.ToString());
return response2;
}
}
[路由(“~/api/myAPI/testapi”)]
[HttpPost]
公共异步任务testapi()
{
String stroragecon=System.Configuration.ConfigurationManager.AppSettings.Get(“MyBlobStorageConnectionString”);
Dictionary dict=新字典();
尝试
{
//使用帐户名和密钥创建CloudStorageAccount对象。
//帐户名应该只是存储帐户的名称,而不是URI,并且
//不包括后缀。键应为您指定的base-64编码字符串
//可以从门户或管理平面获取。
//这将对帐户上的所有操作具有完全权限。
//StorageCredentials StorageCredentials=新的StorageCredentials(myAccountName,myAccountKey);
//CloudStorageAccount CloudStorageAccount=新的CloudStorageAccount(storageCredentials,useHttps:true);
//解析连接字符串并返回对存储帐户的引用。
CloudStorageAccount-storageAccount=CloudStorageAccount.Parse(stroragecon);
//如果连接字符串有效,请继续对Blob执行操作
//这里有储藏室。
//在此处添加其他操作
//创建表示
//存储帐户的Blob存储终结点。
CloudBlobClient CloudBlobClient=storageAccount.CreateCloudBlobClient();
//创建一个名为“quickstartblobs”的容器,然后
//向其追加GUID值以使名称唯一。
CloudBlobContainer CloudBlobContainer=cloudBlobClient.GetContainerReference(“图像”);
//“quickstartblobs”+Guid.NewGuid().ToString());
等待cloudBlobContainer.CreateAsync();
if(cloudBlobContainer.CreateIfNotExists())
{
cloudBlobContainer.SetPermissions(
新BlobContainerPermissions
{
PublicAccess=BlobContainerPublicAccessType.Blob
});
}
//设置权限,使blob是公共的。
/*BlobContainerPermissions权限=新建BlobContainerPermissions
{
PublicAccess=BlobContainerPublicAccessType.Blob
};
等待cloudBlobContainer.SetPermissionsAsync(权限)*/
//从存储帐户创建CloudBlobClient对象。
//此对象是上所有操作的根对象
//此特定帐户的blob服务。
//CloudBlobClient blobClient=cloudStorageAccount.CreateCloudBlobClient();
var httpRequest=HttpContext.Current.Request;
foreach(httpRequest.Files中的字符串文件)
{
HttpResponseMessage response=Request.CreateResponse(HttpStatusCode.Created);
var postedFile=httpRequest.Files[file];
//获取对此帐户中CloudBlobContainer对象的引用。
//此对象可用于在服务上创建容器,
//列出blob、删除容器等。此操作不会产生错误
//调用Azure存储服务。它既不创建容器
//也不验证其存在。
string imageName=“images”+serverTime.Year.ToString()+serverTime.Month.ToString()+serverTime.Day.ToString()+
serverTime.Hour.ToString()+serverTime.Minute.ToString()+serverTime.Second.ToString()
+postedFile.FileName.ToLower();
//CloudBlobContainer container=blobClient.GetContainerReference(imageName.ToLower());
/*if(等待容器.CreateIfNotExistsAsync())
{
等待容器。SetPermissionsAsync(
新BlobContainerPermissions{
PublicAccess=BlobContainerPublicAccessType.Blob
}
);
} */
if(postedFile!=null&&postedFile.ContentLength>0)
{
int MaxContentLength=1024*1024*1;//大小=1 MB
IList AllowedFileExtensions=新列表{.jpg',.gif',.png};
var ext=postedFile.FileName.Substring(postedFile.FileName.LastIndexOf('.');
var extension=ext.ToLower();
如果(!AllowedFileExtensions.Contains(扩展名))
{
var message=string.Format(“请上传.jpg、.gif、.png.”类型的图像);
dict.Add(“错误”,消息);
return Request.CreateResponse(HttpStatusCode.BadRequest,dict);
}
else if(postedFile.ContentLength>MaxContentLength)
{
var message=string.Format(“请上传最大为1MB的文件”);
dict.Add(“错误”,消息);
return Request.CreateResponse(HttpStatusCode.BadRequest,dict);
}
其他的
{
var filePath=HttpContext.Current.Server.MapPath(“~/imagesfiles/uploads”+postedFile.FileName.ToLower()+extension.ToLower());
postedFile.SaveAs(文件路径);
//CloudBlockBlob CloudBlockBlob=container.getblockblobbreference(imageName);
//获取对blob地址的引用,然后
"System.Net.WebException: The remote server returned an error: (400) Bad Request.\r\n at Microsoft.Azure.Storage.Shared.Protocol.HttpResponseParsers.ProcessExpectedStatusCodeNoException[T](HttpStatusCode expectedStatusCode, HttpStatusCode actualStatusCode, T retVal, StorageCommandBase`1 cmd, Exception ex)\r\n at Microsoft.Azure.Storage.Blob.CloudBlobContainer.<>c_DisplayClass149_0.<CreateContainerImpl>b_2(RESTCommand`1 cmd, HttpWebResponse resp, Exception ex, OperationContext ctx)\r\n at Microsoft.Azure.Storage.Core.Executor.Executor.EndGetResponse[T](IAsyncResult getResponseResult)"
else
{
CloudBlockBlob cloudBlockBlob = cloudBlobContainer.GetBlockBlobReference(imageName);
cloudBlockBlob.Properties.ContentType = postedFile.ContentType;
await cloudBlockBlob.UploadFromStreamAsync(postedFile.InputStream);
}