使用Slim框架从POST获取文件以上传到Parse


Getting file from POST to upload to Parse with Slim framework

我目前正试图上传一个文件到解析与Slim框架的表单发布后。由于某些原因,我获得了文件名,但在当前的设置中实际上无法获得该文件。我也试着寻找$_FILES阵列,但没有遇到。我是不是漏掉了什么?这是我目前的路线:

$app->group('/settings', function () use ($app) {
    $app->post('/update(/:settingsId)', function ($settingsId = null) use ($app) {
        $query = new ParseQuery("Settings");
        // Get a specific object:
        $settings = $query->get($settingsId);
        // Set values:
        $settings->set("appName", $app->request->post('appName'));
        $settings->set("directorName", $app->request->post('directorName'));
        $settings->set("mkUsername", $app->request->post('mkUsername'));
        $settings->set("mkPassword", $app->request->post('mkPassword'));
        error_log(print_r($_FILES, true));
        // see if we have a file
        if ($app->request->post('appBackgroundImage')) {
            // save file to Parse
            $appBackgroundImage = ParseFile::createFromData(file_get_contents($_FILES["file"]["tmp_name"]), $app->request->post('appBackgroundImage'));
            $appBackgroundImage->save();
            $settings->set("appBackgroundImage", $appBackgroundImage);
        }
        try {
            $settings->save();
            $app->redirect('/settings');
        } catch (ParseException $ex) {
            $app->redirect('/settings/' . $ex->getCode());
        }
    });
});

不确定这是否完全正确,但这就是我让它工作的方式。如果有人有更好的主意,我会洗耳恭听的。

我将此添加到我的JS中,因此它实际上通过AJAX发布表单,并将文件与正常表单内容一起推送。

// File Uploader
        var form = document.getElementById('settings-form');
        form.onsubmit = function() {
          var formData = new FormData(form);
          formData.append('appBackgroundImage', file);
          var xhr = new XMLHttpRequest();
          // Add any event handlers here...
          xhr.open('POST', form.getAttribute('action'), true);
          xhr.send(formData);
          return false; // To avoid actual submission of the form
        }