Page 221 - AngularJS权威教程
P. 221

18.19  处理文件上传   201


                  在onFile(files)方法中,我们要处理文件上传到S3,并且将记录保存到我们的Dynamo数                                  1
              据库表。我们想做Angular好公民,把这个功能放在UserService服务中,而不是放在控制器里。
                  首先,需要确认我们有这个能力获取一个S3 JavaScript对象,就像我们让dynamo可用那样。                                 2

                   // ...
                   var dynamoCache = $cacheFactory('dynamo'),
                       s3Cache = $cacheFactory('s3Cache');                                           3
                   // ...
                   return {
                       // ...                                                                        4
                       s3: function(params) {
                           var d = $q.defer();
                           credentialsPromise.then(function() {                                      5
                              var s3Obj = s3Cache.get(JSON.stringify(params));
                              if (!s3Obj) {
                                  var s3Obj = new AWS.S3(params);
                                  s3Cache.put(JSON.stringify(params), s3Obj);                        6
                              }
                              d.resolve(s3Obj);
                          });                                                                        7
                          return d.promise;
                      },
                  // ...
                                                                                                     8
                  这个方法与Dynamo对象创建的运行方式相同,它让我们可以直接对S3实例对象进行访问。
              我们很快就会看到这一点。
                                                                                                     9
              18.19  处理文件上传
                                                                                                     10
                  为了处理文件上传,我们需要在UserService中创建一个叫做uploadItemForSale()的方法。
              出于规划的目的,就功能而言,我们想要:                                                                    11
                   将文件上传到S3;
                   为该文件获取一个signedUrl;                                                               12
                   将这个信息保存到数据库。

                  我们将要在这个过程中使用当前用户,所以必须先确认这个用户存在,然后获取一个实例:                                           13

                   // 在scripts/services.js中
                   // ...
                   },                                                                                14
                   Bucket: 'ng-newsletter-example',
                   uploadItemForSale: function(items) {
                       var d = $q.defer();                                                           15
                       service.currentUser().then(function(user) {
                           // 处理上传
                           AWSService.s3({                                                           16
                              params: {
                                  Bucket: service.Bucket
                              }
                          }).then(function(s3) {                                                     17
                              // 我们在S3对象中
                              // 有一个s3 bucket句柄
                          });                                                                        18
                      });
   216   217   218   219   220   221   222   223   224   225   226