Swift 使用 Alamorefire 5 與 ASP.NET Core 3 Web API 合作影像上傳作業

Liddle Fang
4 min readJun 10, 2020

記錄使用 ASP.NET Core 3 Web API 與 Alamorefire 5 合作上傳 UIImage 作業的順序。

ASP.NET Core 3 Web API 部分。新增一個 UploadApiController 負責上傳作業。只放一個 Action

[Route(“api/[controller]”)]
[ApiController]
public class UploadApiController : ControllerBase
{
[HttpPost(“UploadImage”)]
public async Task<string> UploadFile([FromForm] IFormFile file)
{
string uniqueFileName = null;

if ( file != null)
{
try{
string uploadsFolder =
Path.Combine( Directory.GetCurrentDirectory(),”wwwroot", "file path" );
uniqueFileName = DateTime.Now.ToString(“yyyyMMddHHmmssf”) + ".jpg";
string filePath = Path.Combine(uploadsFolder, uniqueFileName); using (var fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
return $"img/{ uniqueFileName }"; }
catch(Exception ex){
return ex.Message;
}
}
else{
return $”file is null.”;
}
}
}

在 Swift 檔案內,直接呼叫 Alamorefire

override func viewDidLoad() {
super.viewDidLoad()
// load image to UIImage object
let image : UIImage = UIImage.init(named: “rocket.jpg”)!
// call function to upload image
postImage(image: image, parameters: [“platform” : “iOS”])
}func postImage(image : UIImage, parameters : Dictionary<String, String>){ // add headers
let headers: HTTPHeaders = [
“Content-type”: “multipart/form-data”
]
// use Alamofire to upload file
AF.upload( multipartFormData: {
formData
in
// append parameters
for (key, value) in parameters {
formData.append( value.data(using: String.Encoding.utf8)!, withName: key)
}
// append data
formData.append(
image.jpegData(compressionQuality: 0.8)!
, withName: “file” // note : asp.net core 3 need a parameter name to naming binary data
, fileName: “file.jpeg”
, mimeType: “image/jpeg”)
},
to: “https://website url/api/UploadApi/UploadImage",
method: .post ,
headers: headers)

.response
{
response
in
let message : String = String( decoding: response.data!, as: UTF8.self)
print(message)
}
}

--

--

Liddle Fang

C# from 2003, Objective-C from 2008, Swift from 2014. Google and StackOverflow are my best friends.