Я не могу загрузить файлы на удаленный сервер (Apache2) с помощью Java Spring Boot и Angular 7. Это хорошо работает на localhost - PullRequest
0 голосов
/ 10 мая 2019

Я не могу загрузить файлы (изображения) на удаленный сервер (apache2).Я использую пружинный сапог Java для задней части и Angular 7 для передней).На localhost: 4200 работает хорошо.На удаленном сервере я получил из консоли браузера Chrome:

POST http://www.xxx.tech:8081/images/upload 400

Ошибка: "{" отметка времени ":" 2019-05-10T09:39: 38.162 + 0000 "," status ": 400," error ":" Bad Request "," message ":" Файл не найден "," path ":" / images / upload "}"
заголовки: HttpHeaders{normalizedNames: Map (0), lazyUpdate: null, lazyInit: ƒ}
сообщение: «Http-сбой для http://www.xxx.tech:8081/images/upload: 400 OK»
name: «HttpErrorResponse»
ok: false
status: 400
statusText: "OK"
url: "http://www.xxx.tech:8081/images/upload"

Папка каталога уже существует на VPS-сервере. Как заставить ее работать? В моем контроллере.java Я пытался заменить

File tmp = new File("../front/assets/img/").getCanonicalFile();

на

File tmp = new File("./front/assets/img/").getCanonicalFile();

и

File tmp = new File("/home/alexandra/www/front/assets/img/").getCanonicalFile();

Но все равно отображается то же сообщение об ошибке

JAVA: ImageController.java

@PostMapping(value="images/upload")
    public String uploadImage( @RequestParam("file") MultipartFile transferedFile) throws Exception{
        try {
            //FOR LOCALHOST (works)
            //File tmp = new File("../FRONT- 
            //Alexandra/src/assets/img/").getCanonicalFile();

            //FOR REMOTE SERVER (don't work)
            File tmp = new File("../front/assets/img/").getCanonicalFile();

            String destination = tmp.getPath() + "/" + transferedFile.getOriginalFilename();

            File data = new File(destination);
            transferedFile.transferTo(data);
            Image image = new Image(transferedFile.getOriginalFilename(), destination);
            imageRepository.save(image);
            return destination;

            }catch( Exception param_exception) { 
                throw new ResponseStatusException(
                    HttpStatus.BAD_REQUEST,
                    "No file found");
            }
    }

Angular: mycomponent.component.ts

public apiUrl: string = environment.ApiUrl;
...

public uploadImaeg(): void {

      this.imgesUploaded.map(image => {

         if (image != null && image != undefined) {
            this.imagesService.addImage(image).subscribe();
         }  
      })     
   }

images.service.ts

public addImage(param_file: File): Observable<Object> {
        const headers: HttpHeaders = new HttpHeaders();
        const data: FormData = new FormData();

        data.append("file", param_file, param_file.name);
        headers.append("Content-Type", "multipart/form-data");
        const Obs: Observable<boolean> = this.serviceHttp.post(
            this.apiUrl + "images/upload", data, { headers: headers}
        ).pipe(
            map(
                (param_response: boolean) => {
                    return param_response;
                }
            )
        );
        return Obs;
    }

environment.prod.ts

export const environment = {
  production: true, 
  ApiUrl: 'http://'+document.location.hostname +':8081/'
};

Ответы [ 2 ]

0 голосов
/ 12 мая 2019

@ AlexGera, вы заставили меня понять, в чем проблема:

Я попробовал ваш код следующим образом:

private final Path rootLocation = Paths.get("images/upload");
    @PostConstruct
    public void init() {
      try {
        Files.createDirectories(rootLocation);
      }
      catch (IOException e) {
         throw new RuntimeException("Could not initialize storage", e);
      }
    }

    @PostMapping(value="images/upload")
    public String uploadImage( @RequestParam("file") MultipartFile transferedFile) throws Exception{
        try {

            File tmp = new File("/home/alexandra/www/front/assets/img/").getCanonicalFile();

            String destination = tmp.getPath() + "/" + transferedFile.getOriginalFilename();

            File data = new File(destination);
            transferedFile.transferTo(data);
            Image image = new Image(transferedFile.getOriginalFilename(), destination);
            imageRepository.save(image);
            return destination;

            }catch( Exception param_exception) { 
                throw new ResponseStatusException(
                    HttpStatus.BAD_REQUEST,
                    "No file found");
            }
    }

он не решил проблему, но создал папку взадняя папка: изображение / загрузка.И права этой папки не были root root , как во всех папках в каталоге сервера filezilla.Это было александра александра

Итак, я изменил права на активы папки и папку img (может быть, только img, последняя папка, должна работать, я не знаю), потому что мой путьэто

/home/alexandra/www/front/assets/img/

Я сделал это:

cd /home/alexandra/www/front
sudo chown alexandra:alexandra assets
cd assets
sudo chown alexandra:alexandra img
sudo service myserver stop
sudo service myserver start
sudo systemctl restart apache2

И это сработало

0 голосов
/ 10 мая 2019

Я не вижу, что вы на самом деле создаете каталог хранилища. Возможно, вы захотите добавить явное создание каталога из-за вашего метода инициализации компонента:

private final Path rootLocation = Paths.get("upload");
@PostConstruct
public void init() {
  try {
    Files.createDirectories(rootLocation);
  }
  catch (IOException e) {
     throw new StorageException("Could not initialize storage", e);
  }

}

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