AngularJS Carrega vários arquivos com a API FormData
Preciso fazer upload de arquivos de imagem e vídeo para o servidor em um aplicativo Angular usando o Laravel 5.1 como back-end. Todas as solicitações do Ajax precisam ir primeiro ao controlador Laravel, e temos o código para saber como o arquivo é tratado quando chega lá. Anteriormente, fizemos formulários HTML normais para enviar uploads de arquivos para o controlador, mas, neste caso, precisamos evitar a atualização de página de um formulário, por isso estou tentando isso no Ajax através do Angular.
Quais informações eu preciso enviar para o controlador Laravel com o Ajax que estava sendo enviado ao controlador através de um formulário HTML anteriormente?
Este é o código no controlador Laravel que manipulou as informações do arquivo quando chegaram lá. É isso que eu preciso descobrir como enviar, para que eu possa reutilizar este código:
$promotion = Promotion::find($id);
if (Input::hasFile('img_path')){
$path = public_path().'/images/promotion/'.$id.'/';
$file_path = $path.'promotion.png';
$delete = File::delete($file_path);
$file = Input::file('img_path');
$uploadSuccess = $file->move($path, 'promotion.png');
$promotion->img_path = '/images/promotion/'.$id.'/promotion.png';
}
if (Input::hasFile('video_path')){
$path = public_path().'/video/promotion/'.$id.'/';
$file_path = $path.'promotion.mp4';
$del,ete = File::delete($file_path);
$file = Input::file('video_path');
$uploadSuccess = $file->move($path, 'promotion.mp4');
$promotion->video_path = '/video/promotion/'.$id.'/promotion.mp4';
}
Como você pode ver acima, estamos convertendo qualquer arquivo que obtemos para um PNG com o nome promotion.png, para facilitar a busca e aceitamos apenas o formato de vídeo .mp4. Por esse motivo, não precisamos nos preocupar em verificar se o arquivo existe e se é possível substituí-lo. É por isso que você pode ver no código que excluímos qualquer arquivo existente com esse nome antes de salvar.
O HTML era apenas uma entrada com um tipo de "arquivo:
<input type="file" id="img_path" name="img_path" class="promo-img-path" accept="image/*">
Estamos usando o Angular agora, então não posso mais enviar os itens acima através de um formulário HTML. É isso que eu preciso descobrir como fazer.
Somos dois desenvolvedores apenas fazendo o nosso melhor, por isso tenho certeza de que há uma maneira melhor de fazer isso. No entanto, antes de refatorar tudo isso, espero poder usar o Angular (ou jQuery como último recurso) para enviar ao controlador os dados de arquivo que o Laravel precisa para que o código acima funcione. A resposta pode ser tão simples quanto "envie um PUT para o método nesse controlador acima, mas, em vez de uma carga JSON normal, use as informações do arquivo nesse formato e você poderá reuni-las com ..."
Também gostaria de receber dicas sobre maneiras melhores de fazer isso no futuro.