Я создаю интернет-магазин. Я выбрал изображение с моего компьютера. Я нажимаю кнопку загрузки и открываю java "http://localhost:4200/files/image.png", но из-за маршрутизации в Angular я не могу загрузить изображение и перехожу на главную страницу. Как сделать доступ к хосту для загрузки?
Этот код создает хост для загрузки образа (java, весенняя загрузка):
@GetMapping("/files/{filename:.+}")
public ResponseEntity<Resource> getFile(@PathVariable String filename) {
System.out.println("/files/...");
Resource file = storageService.loadFile(filename);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getFilename() + "\"")
.body(file);
}
@PostMapping("/post")
public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) {
System.out.println("/post");
String message;
try {
storageService.store(file);
files.add(file.getOriginalFilename());
message = "You successfully uploaded " + file.getOriginalFilename() + "!";
return ResponseEntity.status(HttpStatus.OK).body(message);
} catch (Exception e) {
message = "FAIL to upload " + file.getOriginalFilename() + "!";
return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(message);
}
}
Создать продукт (это изображение после загрузки на Google Drive)
@PostMapping("/create")
public Product create(@RequestBody Product newProduct) throws IOException {
newProduct.setModified(Calendar.getInstance().getTime());
String imageName = newProduct.getThumbnail();
LOGGER.info(imageName);
URL url = new URL("http://localhost:4200/files/" + imageName);
LOGGER.info(String.valueOf(url));
InputStream inputStream = new BufferedInputStream(url.openStream());
FileOutputStream fileOutputStream = new FileOutputStream(imageName);
byte[] buffer = new byte[1024];
while(inputStream.read(buffer) != -1) {
fileOutputStream.write(buffer);
}
inputStream.close();
fileOutputStream.close();
Drive driveService = getDriveService();
File fileMetadata = new File();
fileMetadata.setName(imageName);
java.io.File filePath = new java.io.File(imageName);
FileContent mediaContent = new FileContent("image/jpeg", filePath);
File file = driveService.files().create(fileMetadata, mediaContent).setFields("id").execute();
System.out.println("File ID: " + file.getId());
newProduct.setThumbnail("https://drive.google.com/uc?id=" + file.getId() + "&export=download");
return productRepository.save(newProduct);
}
Угловая:
fakeUpload(): void {
this.progress.percentage = 0;
this.currentFileUpload = this.selectedFiles.item(0);
this.productService.pushFileToStorage(this.currentFileUpload).subscribe(event => {
if (event.type === HttpEventType.UploadProgress) {
this.progress.percentage = Math.round(100 * event.loaded / event.total);
} else if (event instanceof HttpResponse) {
console.log("File is completely uploaded!");
}
});
this.selectedFiles = undefined;
}
может быть, что-то можно сделать с маршрутизацией?
В проекте без маршрутизации работает хорошо.