С удивлением третий раз за месяц вижу одни и те же вопросы, хотя, казалось бы, уже не первый год есть и примеры и доки.

Вызов:

[!FormLister?
&formid=`basic`
&attachments=`ufile`
&rules=`{
"name":{
"required":"Обязательно введите имя"
}
}`
&fileRules=`{
"ufile":{
"required":"Фото забыл",
"allowed":{
"params": [ ["jpg","jpeg"] ],
"message": "Разрешены только фотки"
}
}
}`
&formTpl=`@CODE:
<div class="row">
	<div class="col-md-8 col-md-offset-2">
		<div class="well">
			<form class="form-horizontal" method="post" enctype="multipart/form-data">
				[+form.messages+]
				<input type="hidden" name="formid" value="basic">
				<div class="form-group[+name.errorClass+][+name.requiredClass+]">
					<label for="name" class="col-sm-2 control-label">* Имя</label>
					<div class="col-sm-10">
						<input type="text" class="form-control" id="name" placeholder="Имя" name="name" value="[+name.value+]">
						[+name.error+]
					</div>
				</div>
 
				<div class="form-group[+ufile.errorClass+][+ufile.requiredClass+]">
					<label for="first" class="col-sm-2 control-label">* Приложите фоточку</label>
					<div class="col-sm-10">
						<input type="file" class="form-control" name="ufile">
						[+ufile.error+]
					</div>
				</div>
 
				<div class="form-group">
					<div class="col-sm-offset-2 col-sm-10">
						<button type="submit" class="btn btn-primary"><i class="glyphicon glyphicon-envelope"></i> Отправить</button>
					</div>
				</div>
			</form>
		</div>
	</div>
</div>`
&errorClass=` has-error`
&noemail=`1`
&requiredClass=` has-warning`
&messagesOuterTpl=`@CODE:<div class="alert alert-danger" role="alert">[+messages+]</div>`
&errorTpl=`@CODE:<span class="help-block">[+message+]</span>`
&prepareAfterProcess=`prepareUpload`
!]


Сниппет prepareUpload:

<?php
$files = $FormLister->getFormData('files'); 
if (isset($files['ufile']) && $files['ufile']['error'] === 0) {  
    $dir = 'assets/images/';
    $filename = $FormLister->fs->takeFileName($files['ufile']['name']);
    $ext = $FormLister->fs->takeFileExt($files['ufile']['name']);
    $filename = $modx->stripAlias($filename).'.'.$ext;
    $filename = $FormLister->fs->getInexistantFilename($dir.$filename,true);
    if ($FormLister->fs->makeDir($dir) && move_uploaded_file($files['ufile']['tmp_name'],$filename)) {
        return $data;
    }
}