无法使用Parse服务器将大文件保存到S3

时间:2017-02-19 19:24:05

标签: ios parse-platform amazon-s3 parse-server

我尝试使用Parse Server保存到S3存储桶,当文件较小时可以正确保存,例如864.2KB。但是,当文件很大(例如5MB)时,它会抱怨一条消息:“数据无法读取,因为格式不正确”

我正在使用以下代码将视频文件保存到S3

 func saveVideo(withVideoURL url: URL){
        let post = PFObject(className: "Post")
        post["caption"] = "Out of the game for 6 months, but back with vengeance. Meet your 2017 AO Men's champion"
        do{
            let data = try Data(contentsOf: url)
            print(data)
            post["media"] = PFFile(data: data)
            post.saveInBackground { (success, error) in
                if success{
                    print("video saved")
                }else{
                    print("failed")
                    if error != nil{
                        print(error!.localizedDescription)
                    }else{
                        print("erorr is nil")
                    }
                }
            }
        }catch let error as NSError{
            print("can't read")
            print(error.localizedDescription)
        }
    }

此外,即使小视频文件确实被保存到S3,它也包含扩展名.bin而不是例如.mp4。我想知道这里发生了什么 网址最终看起来像这样

https://s3-us-west-1.amazonaws.com/sampleApp/19d5bce20f8b55te1b1b8f370212533e5_file.bin

2 个答案:

答案 0 :(得分:1)

您需要规定内容类型。你可以这样做:

post["media"] =  PFFile(data: data, contentType: "video/mp4")

答案 1 :(得分:1)

parse-server索引文件中的以下设置可以帮助您:

var bodyParser = require('body-parser');
app.use(bodyParser.json({limit: '20mb'}));
app.use(bodyParser.urlencoded({limit: '20mb', extended: true}));

如果您使用弹性beanstalk,则必须在文件夹files.config中包含名为.ebextensions的文件,其内容如下。

files:
/etc/nginx/conf.d/proxy.conf:
    content: |
      client_max_body_size 20M;

这解决了我的问题。