.net5 core webapi項目實戰之十七:F8用戶上傳自己的照片


本篇對之前的設計做一下擴展,實現F8功能(見紅色部分),客戶端可以通過調用此接口API上傳一張(或多張)自己的照片。

功能序號 HTTP謂詞(HTTP verbs) API 描述
F1 GET /api/users 管理員獲取用戶列表
F2 POST /api/users 管理員添加用戶
F3 PATCH /api/users/{id}/role 管理員修改用戶角色
F4 PATCH /api/users/{id}/state 管理員鎖定/解鎖用戶
F5 GET /api/users/{id} 用戶獲取自己的信息
F6 PUT /api/users/{id} 用戶更新自己的信息
F7 PATCH /api/users/{id}/password 用戶修改密碼
F8 POST /api/users/{id}/photo 用戶上傳自己的圖片

 

一、准備工作:

1. 在項目的根目錄下新增 Images 的文件夾用來存放上傳的圖片,如下:

2. 添加如下3個引用

using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using System.IO;

3. 在UsersController.cs的構造函數中注入環境實例以便獲取應用程序目錄,代碼如下(紅色部分):

1         private IWebHostEnvironment _env;
2         private ILogger<UsersController> _logger;
3         private IUserDao _userDao;
4         public UsersController(IWebHostEnvironment env, ILogger<UsersController> logger, IUserDao userDao)
5         {
6             _env = env;
7             _logger = logger;
8             _userDao = userDao;
9         }

 

二、終結點編碼

新增終結點 UploadPhoto( ),路由屬性為 [Route("{id}/photo")] ,代碼如下:

 1         [Route("{id}/photo")]
 2         [HttpPost]
 3         public ContentResult UploadPhoto(int id)
 4         {
 5             //圖片保存路徑
 6             string filePath = _env.ContentRootPath + "\\Images\\";
 7 
 8             string fullName = string.Empty;
 9 
10             //Request.Form.Files獲取客戶端POST過來的所有文件
11             IFormFileCollection files = Request.Form.Files;
12             foreach (FormFile file in files) //遍歷處理每一個文件
13             { 
14                 //Path.GetExtension()獲取文件擴展名
15                 string exten = Path.GetExtension(file.FileName).ToLower();
16 
17                 //擴展名不符合要求就不處理
18                 if (exten != ".jpg" && exten != ".png") continue;
19 
20                 //Guid.NewGuid().ToString()生成一個GUID風格的文件名避免重名
21                 string fileName = Guid.NewGuid().ToString();
22 
23                 fullName = filePath + fileName + exten;
24 
25                 //用using語句釋放文件資源
26                 using (FileStream stream = new FileStream(fullName, FileMode.Create, FileAccess.Write))
27                 {
28                     file.CopyTo(stream);
29                     stream.Flush();
30                 }
31 
32             }
33             return Content("{'result':'ok'}");
34         }

 

三、測試

 打開POSTMAN運行網址 http://localhost:52384/api/users/1/photo,添加兩個圖片文件后發送請求,如下:

可以看到在解決方案資源管理器中已經生成了2個圖片文件,如下:

===================================================================

補充:

實際項目中需要在終結點 UploadPhoto( ) 中增加 try{ } catch{ }語句處理異常並寫入日志,

之前的篇章有詳細介紹,可以參考。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM