簡體   English   中英

使用Vapor上傳文件

[英]file upload using Vapor

我找不到處理文件上傳的任何示例,尤其是如何保存到特定文件夾中。

這是代碼,addVideo是HTTP POST multipart / form-data:

videos.post("addVideo") { req in

    // need to save req.multipart["video"] into /data/videos/

    return try JSON(node: ["status": 0, "message": "success"])
}

示例如下:

vapor 2.0服務器代碼:

let d =drop.grouped("file");
d.post("updateFile") { req in
  let data = Data.init(bytes: (req.data["image"]?.bytes)!)
  let picName = req.data["name"]?.string ?? String();
  try Data(data).write(to: URL(fileURLWithPath: "/Users/xx/Desktop/\(picName).jpg"))
  return try JSON(node: ["status": 0, "message": "success"])
}

客戶代碼:

Alamofire.upload(multipartFormData: { (multipartFormData) in

        multipartFormData.append(imageData!, withName: "image", fileName: "pic", mimeType:"image/jpg")

        multipartFormData.append("picName".data(using: .utf8)!, withName: "name")

    }, to: "http://0.0.0.0:8083/file/updateFile") { (encodingResult) in

        switch encodingResult {
        case .success(let upload, _, _):
            upload.responseJSON { response in
                debugPrint(response)
            }
        case .failure(let encodingError):
            print(encodingError)
        }
}

從您的Multipart.File獲取Bytes並轉換為Data

guard let file = request.multipart?["video"]?.file else {
  return "Not found"
}
try Data(file.data).write(to: URL(fileURLWithPath: "/data/videos/FILENAME"))

您可以從File對象獲取FILENAME或創建自己的File

其他答案解釋了如何將數據另存為文件時,以下代碼顯示了如何將數據另存為數據庫blob:

guard 
    let name = request.data["filename"]?.string, 
    let blob = request.data["file"]?.bytes
else {
    throw Abort(.badRequest, reason: "Fields 'filename' and/or 'file' is invalid")
}
let user = try request.user()
let image = try Image(filename: name, user: user, file: blob)
try image.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM