实现一个Web Api,把女友照片保存到Azure云的storage里。json
在对应的Api Controller里,加上attribute:api
[Consumes("application/json", "multipart/form-data")]
而后定义一个model,用来接收上传的图片:浏览器
/// <summary> /// Image model /// </summary> public class UploadImage { /// <summary> /// imageFile /// </summary> public IFormFile imageFile { get; set; } }
实现对应的Api,处理客户端上传图片的请求:app
/// <summary> /// UploadImage /// </summary> /// <param name="imageData"></param> /// <returns></returns> [HttpPost] [Route("imageupload")] public async Task<IActionResult> UploadImage([FromForm]UploadImage imageData) { var stream = imageData.imageFile.OpenReadStream(); var name = imageData.imageFile.FileName; var uploadResult = await UploadFileAsBlob(stream, name); return Ok(name); }
在Azure云服务建立相应的Storage,并在对应的Storage下建一个Blob,最后在Blob里建立一个Container,在storage的Access keys里,保存connection string,这个是服务端链接storage的credential key。
由于如今的云服务都是图形化操做,这里再也不详述,在Portal都有对应的操做。async
引用两个namespace:post
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Blob;
链接Azure storage:spa
/// <summary> /// Save image to Azure blob /// </summary> /// <param name="stream"></param> /// <param name="filename"></param> /// <returns></returns> public async Task<string> UploadFileAsBlob(Stream stream, string filename) { CloudStorageAccount storageAccount = CloudStorageAccount.Parse("StorageAccountConnectionString"); // Create the blob client. CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); // Retrieve a reference to a container. CloudBlobContainer container = blobClient.GetContainerReference("BlobContainerName"); CloudBlockBlob blockBlob = container.GetBlockBlobReference(filename); await blockBlob.UploadFromStreamAsync(stream); stream.Dispose(); return blockBlob?.Uri.ToString(); }
选择Body,在body里选择form-data,而后把key设置成model里的变量名称:3d
最后保存在Azure的storage中,code
在浏览器地址栏输入storage 的地址+ 照片名称,把女友的照片下载到本地。orm