C# 通过web api ASP.NET framework web应用程序c将图像/文件上载到blob azure#

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

获取http 400,尝试将图像上载到blob时,使用postman测试api:

 [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);
                        }