swift - Alamofire OSX 上传视频

标签 swift macos video alamofire

尝试使用 Alamofire 上传短视频文件。该 api 是一个 API 网关端点,它指向一个处理视频然后将其存储在 S3 中的 lambda 函数。我只需要弄清楚为什么我无法将 Mac 上的视频正确发送到 API。

func uploadVideo() {
    let buildUrl = URL(fileURLWithPath: pathToVideoFile)

    Alamofire.upload(buildUrl, to: apiUrl).responseJSON { response in
        debugPrint(response)
    }
}

最佳答案

我能够找到我尝试的默认上传过程的问题。我的视频文件大于 AWS API Gateway 支持的最大有效负载大小 10MB,因此我能够通过请求 AWS S3 的预签名 URL,然后将视频直接发布到 S3 来创建解决方案

func getPresignedUrl() {
    let uploadUrl = URL(string: awsLambdaUrl)

    Alamofire.request(uploadUrl!, method: .put, parameters: ["filename": filename ], encoding: JSONEncoding.default).responseJSON { response in
        if let result = response.result.value {
            let JSON = result as! NSDictionary
            self.postToS3(JSON["url"] as! String)
        }
    }
}

func postToS3(_ url: String) {
    let buildUrl = URL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0], isDirectory: true).appendingPathComponent("\(filename).mp4")
    Alamofire.upload(buildUrl, to: url, method: .put, headers: ["Content-Type": "video/mp4", "x-amz-acl": "public-read"]).responseString { response in
        if response.result.isSuccess {
            return self.deleteVideo()
        }
    }
}

处理预签名 URL 的 AWS Lambda 函数是:

const aws = require('aws-sdk');
const s3 = new aws.S3();

exports.handler = (event, context, callback) => {

    var params = {
        Bucket: 'YOUR_BUCKET_NAME', 
        Key: `${event.body.filename}.mp4`, 
        ACL: 'public-read',
        Expires: 120,
        ContentType: 'video/mp4'
    };

    s3.getSignedUrl('putObject', params, function (err, url) {
        if (err) {
            callback(err);
        } else {
            callback(null, { url });
        }
    });
};

关于swift - Alamofire OSX 上传视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46062224/

相关文章:

macos - 无法使用 Cocoa 中的服务在 Finder 的上下文菜单中添加项目

c++ - 使用带有网络摄像头的 FFmpeg 编码和 UDP

ios - 从麦克风播放音频

swift - 如何读取 Xcode (Swift) 中 OS X 菜单栏的用户选择

ios - 在 Sprite Kit 中使用 3D touch 测量压力

ios - (推送通知)当我调用 getNotificationSettings 时,alertSetting 返回 NotSupported

macos - macOS Mojave 10.14.2 上的 gdb

swift - 即使刷新文本,NSTextView 链接仍保持 "baked"

c++ - Opencv C++ : How to split video several part by time?

ios - 如何判断给定文件是否可以通过照片框架添加到照片库?