2017-09-05 2 views
0

Alamofireを使用して短いビデオファイルをアップロードしようとしています。 APIはAPIゲートウェイのエンドポイントで、ビデオを処理してS3に格納するラムダ関数を指します。私はちょうど私がAPIに正しく送られたMacのビデオを正しく取得できない理由を理解する必要があります。Alamofire OSXアップロードビデオ

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

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

答えて

0

私が試みていたデフォルトのアップロードプロセスで問題が見つかりました。私のビデオファイルは、AWS API Gatewayは、私は

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

S3

に直接AWS S3の事前署名URLを要求して、ビデオを掲載することにより、周りの仕事を作成することができたサポート10メガバイトの最大ペイロードサイズよりも大きかったですそして、事前に署名したURLを処理AWSラムダ関数は次のとおりです。

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