Как загрузить выбранное изображение на java сервер (Angular 2/7, Spring boot, Rest API) - PullRequest
0 голосов
/ 19 мая 2019

Я создаю интернет-магазин. Я выбрал изображение с моего компьютера. Я нажимаю кнопку загрузки и открываю 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;
  }

может быть, что-то можно сделать с маршрутизацией? В проекте без маршрутизации работает хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...