Как прочитать файл, сохраняемый на сервере Parse с помощью Cloud Code, перед тем, как сохранить его? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь использовать облачный код для проверки того, находится ли предоставленное пользователем изображение в поддерживаемом типе файла и не слишком большой.

Я знаю, что мне нужно выполнить эту проверку на стороне сервера, и я думаю,Я должен сделать это с помощью Cloud Code с использованием beforeSave - в документе даже есть конкретный пример о проверке данных, но он не объясняет, как обрабатывать файлы, и я не мог понять это.

Я пыталсядокументированный метод сохранения файлов, т. е.

file = fileUploadControl.files[0];
var parseFile = new Parse.File(name, file);
currentUser.set("picture", parseFile);
currentUser.save();

и в облачном коде, Parse.Cloud.beforeSave(Parse.User, (request, response) => { // code here });

Но 1. это все же фактически сохраняет файл на моем сервере, верно?Сначала я хочу проверить размер файла, чтобы не сохранять слишком много больших файлов ...

И 2. Даже тогда я не знаю, что делать в обратном вызове beforeSave.Кажется, я могу получить доступ только к URL-адресу сохраненного изображения (доказательство того, что оно было загружено), и кажется очень нелогичным сделать еще один запрос https, чтобы проверить размер и тип файла, прежде чем решить, следует ли продолжить присоединениефайл для объекта User.

(в настоящее время я использую remote-file-size и file-type для проверки размера и типа загруженного файла, но здесь также нет успеха).

Iтакже пытался вызвать функцию Cloud, но мне кажется, что я поступаю неправильно, и к тому же я сталкиваюсь с теми же проблемами.Я могу вызвать функцию Cloud и передать сохраненный ParseFile в качестве параметра, а затем я знаю, как сохранить его в объекте User из кода Cloud с помощью мастер-ключа, но, как указано выше, он все равно включает загрузку файла на сервер и последующую-выбор его по URL.

Я что-то здесь упускаю?Нет ли способа сделать что-то вроде beforeSave на Parse.File, а затем остановить сохранение файла, если он не соответствует определенным критериям?

Cheers.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы должны использовать сохранить в фоновом режиме

file = ParseFile("filename", file)
file?.saveInBackground({ e ->
if (e == null) {

} else {
  Toast.makeText(applicationContext, "Error: $e", Toast.LENGTH_SHORT).show()

  e.printStackTrace()
  Log.d("DEBUG", "file " + e.code)
}
}, { percentDone ->
  Log.d("DEBUG", "file:" + percentDone!!)
})
0 голосов
/ 14 февраля 2019

Если вам нужно что-то сделать с файлами, parse позволяет перезаписать файловый адаптер для обработки файловых операций.

Вы можете указать файловый адаптер, который будет использоваться в вашей установке ParseServer:

    var FSStoreAdapter = require('./file_adapter');
    var api = new ParseServer({
      databaseURI: databaseUri ,
      cloud: process.env.CLOUD_CODE_MAIN || __dirname + '/cloud/main.js',
      appId: process.env.APP_ID,
      filesAdapter: fs_store_adapter, // YOUR FILE ADAPTER
      masterKey: process.env.MASTER_KEY, //Add your master key here. Keep it secret!
      serverURL: "https://yourUrl",  // Don't forget to change to https if needed
      publicServerURL: "https://yourUrl",
      liveQuery: {
        classNames: ["Posts", "Comments"] // List of classes to support for query subscriptions
      }
      maxUploadSize: "500mb"  //you will now have 500mb limit :)
    });

Тем не менее, вы также можете указать maxUploadSize в своем объявлении, как вы можете видеть в последней строке.

...