使用 Spring 引导上传多个文件
Multiple files upload with Spring Boot
我正在尝试使用 ng-file-upload 和 Spring Boot 上传多张图片。问题是 angularjs 发送文件顺序错误,没有顺序,乱序。
Select 图片 0 1 2 3 4 5
并且发送时需要按此顺序。但
Angularjs 按顺序发送文件 5 2 1 0 4 3
。
为什么会这样?我想按照 0 1 2...35 36
的顺序一张一张发送图片。 Example of the problem.
Index.html
<!-- Input Save images-->
<input class="btn btn-primary" multiple type="button"
upload-file="vm.fotos" ngf-select="vm.uploadPaginas($files,$invalidFiles)"
id="file" accept="image/*" ngf-max-size="2MB" value="Selecionar fotos" />
uploadimages.js
function uploadPaginas(paginas, paginaErro) {
vm.paginas = paginas;
vm.paginaErro = paginaErro;
if (paginas.length && vm.formPagina.$valid) {
angular.forEach(paginas, function (pagina, count) {
Upload.upload({
url: '/api/pagina',
method: 'POST',
arrayKey: '',
data: { paginas: pagina, nome: vm.pagina.descricao, capitulo: vm.pagina.capitulo, numCapitulo: count }
}).then(function (data) {
console.log("File: "+pagina.name+"\n Count: "+count);
})
})
} else {
vm.mensagemPagina = "Não foi salvo";
}
}
imagesController.java
/**
* Save images
*
* @param paginas
* @param nome
* @param Capitulo
* @param numCapitulo
* @return
* @throws IOException
*/
@RequestMapping(value = "/pagina", method = RequestMethod.POST, consumes = { "multipart/form-data" })
public @ResponseBody ResponseEntity<PaginasEntity> cadastrarPaginas(
@RequestParam(value = "paginas",required = false) MultipartFile paginas, @RequestParam(value = "nome",required = false) String nome,
@RequestParam(value = "capitulo",required = false) Long Capitulo,
@RequestParam(value = "numCapitulo", required = false) int numCapitulo) throws IOException {
if (!paginas.isEmpty()) {
numCapitulo++;
System.out.println("capitulo:"+numCapitulo);
CapitulosEntity capitulo = new CapitulosEntity();
capitulo.setId(Capitulo);
System.out.println("nome:"+paginas.getOriginalFilename());
PaginasEntity pagina = new PaginasEntity();
pagina.setFotos(paginas.getBytes());
pagina.setNome(nome);
pagina.setCapitulo(capitulo);
pagina.setNumeroPagina(numCapitulo);
paginaService.cadastrar(pagina);
} else {
throw new RuntimeException("Erro ao salvar Pagina");
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
一次上传一个文件是一种好习惯吗?还是不行?
当select多张图片顺序上传时,angularjs不按升序发送图片,后台按5 3 1 4 2 0这样无组织的顺序接收图片并保存在数据库中。我不要这个。
我的解决方案是使用查询 ORDER BY ASC
来组织图像,然后当 return api GET /pagina/{id
} 所有图像将按升序排列。
PaginasRepository.java
@Repository
public interface PaginasRepository extends CrudRepository<PaginasEntity, Long> {
@Query("SELECT p FROM PaginasEntity as p WHERE p.capitulo =:id ORDER BY numeroPagina ASC")
public Page<PaginasEntity> buscarPaginaPorCapituloId(@Param("id") CapitulosEntity id, Pageable pageable);
}
我正在尝试使用 ng-file-upload 和 Spring Boot 上传多张图片。问题是 angularjs 发送文件顺序错误,没有顺序,乱序。
Select 图片 0 1 2 3 4 5
并且发送时需要按此顺序。但
Angularjs 按顺序发送文件 5 2 1 0 4 3
。
为什么会这样?我想按照 0 1 2...35 36
的顺序一张一张发送图片。 Example of the problem.
Index.html
<!-- Input Save images-->
<input class="btn btn-primary" multiple type="button"
upload-file="vm.fotos" ngf-select="vm.uploadPaginas($files,$invalidFiles)"
id="file" accept="image/*" ngf-max-size="2MB" value="Selecionar fotos" />
uploadimages.js
function uploadPaginas(paginas, paginaErro) {
vm.paginas = paginas;
vm.paginaErro = paginaErro;
if (paginas.length && vm.formPagina.$valid) {
angular.forEach(paginas, function (pagina, count) {
Upload.upload({
url: '/api/pagina',
method: 'POST',
arrayKey: '',
data: { paginas: pagina, nome: vm.pagina.descricao, capitulo: vm.pagina.capitulo, numCapitulo: count }
}).then(function (data) {
console.log("File: "+pagina.name+"\n Count: "+count);
})
})
} else {
vm.mensagemPagina = "Não foi salvo";
}
}
imagesController.java
/**
* Save images
*
* @param paginas
* @param nome
* @param Capitulo
* @param numCapitulo
* @return
* @throws IOException
*/
@RequestMapping(value = "/pagina", method = RequestMethod.POST, consumes = { "multipart/form-data" })
public @ResponseBody ResponseEntity<PaginasEntity> cadastrarPaginas(
@RequestParam(value = "paginas",required = false) MultipartFile paginas, @RequestParam(value = "nome",required = false) String nome,
@RequestParam(value = "capitulo",required = false) Long Capitulo,
@RequestParam(value = "numCapitulo", required = false) int numCapitulo) throws IOException {
if (!paginas.isEmpty()) {
numCapitulo++;
System.out.println("capitulo:"+numCapitulo);
CapitulosEntity capitulo = new CapitulosEntity();
capitulo.setId(Capitulo);
System.out.println("nome:"+paginas.getOriginalFilename());
PaginasEntity pagina = new PaginasEntity();
pagina.setFotos(paginas.getBytes());
pagina.setNome(nome);
pagina.setCapitulo(capitulo);
pagina.setNumeroPagina(numCapitulo);
paginaService.cadastrar(pagina);
} else {
throw new RuntimeException("Erro ao salvar Pagina");
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
一次上传一个文件是一种好习惯吗?还是不行?
当select多张图片顺序上传时,angularjs不按升序发送图片,后台按5 3 1 4 2 0这样无组织的顺序接收图片并保存在数据库中。我不要这个。
我的解决方案是使用查询 ORDER BY ASC
来组织图像,然后当 return api GET /pagina/{id
} 所有图像将按升序排列。
PaginasRepository.java
@Repository
public interface PaginasRepository extends CrudRepository<PaginasEntity, Long> {
@Query("SELECT p FROM PaginasEntity as p WHERE p.capitulo =:id ORDER BY numeroPagina ASC")
public Page<PaginasEntity> buscarPaginaPorCapituloId(@Param("id") CapitulosEntity id, Pageable pageable);
}