Не удается удалить аудиоданные на AWS-S3 в приложении Parse-Server - PullRequest
0 голосов
/ 25 апреля 2018

У меня трудные времена, чтобы заставить вещи работать должным образом при использовании AWS-S3 с Parse-Server на Heroku.

В AWS у меня есть корзина S3 с именем mybucket, и пользователь с именем mybucket-aws связан с этой политикой:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:*"
            ],
            "Resource": [
                "arn:aws:s3:::mybucket",
                "arn:aws:s3:::mybucket/*"
            ]
        }
    ]
}

Кроме того, на Heroku у меня есть сервер разбора, подобный этому:

var express = require('express');
var ParseServer = require('parse-server').ParseServer;
var path = require('path');
var mongo = require('mongodb');
var MongoClient = mongo.MongoClient;

var databaseUri = process.env.DATABASE_URI || process.env.MONGODB_URI;

if (!databaseUri) {
  console.log('DATABASE_URI not specified, falling back to localhost.');
}

var api = new ParseServer({
  databaseURI: databaseUri,
  cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
  appId: process.env.APP_ID,
  masterKey: process.env.MASTER_KEY,
  filesAdapter: "@parse/s3-files-adapter",
  serverURL: process.env.SERVER_URL,
  publicServerURL: process.env.PARSE_PUBLIC_SERVER_URL,
  appName: 'MyApp',
  .........
});

А вот код swift, который я использую в своем приложении iOS при загрузке аудиоданных на сервер:

//audioFileName is the name of the sound file.
do {let soundData = try Data(contentsOf: getDocumentsDirectory().appendingPathComponent(audioFileName)),
    parse_Sound = PFFile(name: "Voice", data: soundData)
    parse_Sound?.saveInBackground(block: {
        (succeeded:Bool, error:Error?) in
        if succeeded {
            // Keep working all is OK.
        } else {print("Error: \(error ?? "" as! Error)")}
    })
} catch let error {
    print("Error:\n" + error.localizedDescription)
}

Наконец, вот код javascript, запускаемый через облачную функцию, которая используется, когда я хочу удалить аудиоданные с сервера. Он вызывается через приложение iOS. И это не (полностью) работает.

const aws = require('aws-sdk');
.........

(function() {
 var destroyPromises = [];
 const s3 = new aws.S3();
 for (i = 0; i < myArray.length; i++) {
   // Let us remove the sound data:
   destroyPromises.push(s3.deleteObject({
     Bucket: "mybucket",
     Key: myArray[i].get("audio")
   }).promise());
   destroyPromises.push(myArray[i].destroy({}));
 }

Поскольку остальные данные удаляются, как и ожидалось, я думаю, что это не ошибка в использовании обещаний. Только аудиоданные на AWS / S3 не удаляются должным образом. Зная, что я могу записать данные в корзину (при загрузке), я предполагаю, что у меня есть доступ на запись и, следовательно, я также должен иметь возможность удалять данные. Но я не уверен на 100% в этом и подозреваю, что что-то может быть не так в моих настройках разрешений. В любом случае, кто-то может понять, почему я не могу удалить аудиоданные в моем s3-ведре и сказать, что мне делать?

...