1. 程式人生 > >.Net Core Web Api 上傳女朋友的照片到微軟雲Azure Storage

.Net Core Web Api 上傳女朋友的照片到微軟雲Azure Storage

前言

實現一個Web Api,把女朋友照片儲存到Azure雲的storage裡。

Image Upload Api

在對應的Api Controller裡,加上attribute:

[Consumes("application/json", "multipart/form-data")]

然後定義一個model,用來接收上傳的圖片:

/// <summary>
/// Image model
/// </summary>
public class UploadImage
{
    /// <summary>
    /// imageFile
    /// </summary>
    public IFormFile imageFile { get; set; }
}

實現對應的Api,處理客戶端上傳圖片的請求:

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

建立Storage

在Azure雲服務建立相應的Storage,並在對應的Storage下建一個Blob,最後在Blob裡建立一個Container,在storage的Access keys裡,儲存connection string,這個是服務端連線storage的credential key。
因為現在的雲服務都是圖形化操作,這裡不再詳述,在Portal都有對應的操作。

儲存圖片在Blob中

引用兩個namespace:

using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;  

連線Azure storage:

/// <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();
 }

Postman上傳效果

選擇Body,在body裡選擇form-data,然後把key設定成model裡的變數名稱:

最後儲存在Azure的storage中,

在瀏覽器位址列輸入storage 的地址+ 照片名稱,把女朋友的照片下載到本地。