2017-03-21 1 views
1

Ich habe das Formular (AbstractType erstreckt):Symfony3-Ajax Hochladen mehrerer Dateien mit Hol- und Formdata

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder 
    ->add('files', FileFieldType::class, [ 
     'label' => 'Files', 
     'multiple' => true] 
    ); 
} 

Diese winzige Form im Frontend (ReactJS):

<form onChange={onChange} ref={node => form = node}> 
    <input type="file" multiple={multiple} name="file[files]" /> 
</form> 

I der Upload das folgende passiert geschieht:

const data = new FormData(form); 

fetch('/upload', { 
    method: 'POST', 
    headers: { 
    'Content-Type': 'multipart/form-data' 
    }, 
    body: data 
}); 

Aber auf dem Server kommen keine Dateien, so in der Steuerung :

$request->files->all(); //[] 

und daher ist die Form auch nie gültig.

In einem Funktionstest mir dies mit:

$client->request('POST', '/upload', [], ['file' => ['files' => $file]]); 

wo $fileUploadedFile auf ein Objekt vom Typ bezieht. Das funktioniert, was ist der Fehler hier?

Antwort

1

Wie ich in this answer finden konnte:

Die Grundidee ist, dass jeder Teil (geteilt durch Zeichenfolge in Grenze mit -) hat ein eigener Header ist (Content-Type im zweiten Teil, zum Beispiel.) Das FormData-Objekt verwaltet all dies für Sie, also ist es ein besserer Weg, um unsere Ziele zu erreichen.

So die Upload-Arbeit zu machen, musste ich die content-type aus dem Kopf- und benennen Sie das Eingabefeld fallen: file[files][].

Verwandte Themen