Bonjour,
Voila je rencontre un petit problème avec mon code.
Dans UploadComponent je fais:
...
class UploadComponent extends Component
{
public function send($data)
{
if(!empty($data)){
foreach($data as $file){
$filename = $this->request->data('name');
$file_tmp_name = $file['tmp_name'];
$dir = WWW_ROOT.'uploads';
$allowed = ['rar', 'zip'];
if(!in_array(substr(strrchr($filename, '.'), 1), $allowed)){
throw new InternalErrorException("Error Processing Request.", 1);
}elseif(is_uploaded_file($file_tmp_name)){
move_uploaded_file($file_tmp_name, $dir.DS.Text::uuid().'-'.$filename);
}
}
}
}
}
puis j'appel le component Upload dans AppController puis dans TokensController je fais:
public function add()
{
$token = $this->Tokens->newEntity();
if ($this->request->is('post')) {
$token = $this->Tokens->patchEntity($token, $this->request->data);
$hash = hash('sha512', sha1(rand() . uniqid() . time()));
$token->token = $hash;
$this->Upload->send($this->request->data('kv'));
if ($this->Tokens->save($token)) {
$this->Flash->success(__('Le KV a été sauvegardé.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('Erreur lors de l\'enregistrement.'));
}
}
$this->set(compact('token'));
$this->set('_serialize', ['token']);
}
pour ajouter un kv. Et dans la vue je fais:
...
<?= $this->Form->create($token, ['enctype' => 'multipart/form-data']) ?>
<?= $this->Form->input('name', ['placeholder' => 'Le nom du kv doit être unique. Par Exemple: KV_1']) ?>
<!--<div class="file-inputs">-->
<?= $this->Form->file('kv', ['multiple']); ?>
<!-- <div class="fake-file-inputs" onclick="$('#InputFile').click();">
<p>Ajouter un kv</p>
</div>
<div id="Choice"></div>
</div>-->
<p style="margin-left: 45%;">Le fichier doit être en .rar ou .zip</p>
<input type="submit" value="Ajouter le KV">
<?= $this->Form->end() ?>
...
Je veux upload des fichiers rar et/ou zip.
Alors j'obtiens une belle erreur:
L'erreur: Warning (2): Illegal string offset 'tmp_name' [APP/Controller/Component/UploadComponent.php, line 20]
Je vous remercie d'avance pour votre aide.
Hello,
Apparement tu a un problème avec la variable $file['tmp_name'];
Dans ta fonction send de ton UploadComponent , fait un debug de $file dans ton foreach.
debug($file); exit;
Tu devrais voir ce qui bug.
Bonsoir,
merci de ta réponse,
je te copie ce que cake me dit (car le debug me sort jsute l'archive envoyée).
$data = [
'name' => '115675333443.rar',
'type' => 'application/octet-stream',
'tmp_name' => '/tmp/php6dGK7V',
'error' => (int) 0,
'size' => (int) 5537
]
$file = '115675333443.rar'
$filename = 'KV_1'
Merci d'avance.
Hello,
Oui alors déjà c'est normal, ta variable $file_tmp_name = $file['tmp_name']; n'existe pas.
Essaye de mettre à la place :
$file_tmp_name = $this->request->data('tmp_name');