按报告
here
,我陷入了一个与通过Ajax请求上传到CMS上的文件相关的问题中。
基本上,我得到了一个前端表单,它必须通过Ajax调用将文件发送到页面控制器。文件必须保存并与
Member/DataExtension
实现了一个
File::class/$many_many
属性/关系(以便将它们保存并关联到每个CMS用户)。
我的方法是:
我的
Member Extension
[...]
class UtenteExtension extends DataExtension
{
private static $many_many = [
'AllegatiUpload' => File::class,
[...]
];
private static $owns = [
'AllegatiUpload',
[...]
];
[...]
这个
Controller
卷入的:
use SilverStripe\Control\HTTPRequest;
use SilverStripe\Control\HTTPResponse;
use SilverStripe\ErrorPage;
use SilverStripe\Assets\Folder;
use SilverStripe\Assets\File;
use SilverStripe\Assets\Upload;
use SilverStripe\Security;
use SilverStripe\Security\Group;
use SilverStripe\Assets\Storage\AssetStore;
class UtenteDashboardController extends PageController
{
private static $allowed_actions = [
'carica'
];
public function carica(SS_HTTPRequest $request) {
if (!$request->isAjax()) {
return ErrorPage::response_for(404);
} else if (!$request->isPOST()) {
return $this->httpError(400, 'Metodo POST richiesto');
} else {
$documento = $request->postVar('documento');
if (!isset($documento)) {
return $this->httpError(500, 'Dati richiesti mancanti');
} else {
$utente = Security::getCurrentUser();
if ($utente->inGroup(Group::get()->filter('Code', 'clienti')->first()->ID)) {
$cartellaUpload = 'clienti/'. strtolower($utente->Surname) .'/uploads';
Folder::find_or_make($cartellaUpload);
$file = File::create();
$upload = Upload::create();
$upload->loadIntoFile($documento, $file, $cartellaUpload);
if ($upload->isError()) {
return $this->httpError(400, 'Errore di caricamento file');
} else {
$utente->{'AllegatiUpload.ID'} = $upload->getFile()->ID;
$utente->write();
return new HTTPResponse;
}
} else {
return $this->httpError(401, 'Utente non abilitato');
}
}
}
}
}
这将导致没有写入数据库文件表,也不会在设计的
assets
目标文件夹。此外,不会引发任何异常-它返回
HTTPResponse
所以我假设代码运行时没有错误?。在任何情况下,这是请求结果:
现在我不明白我在这里错过了什么。
有人能帮我找出错误吗?
事先谢谢。