Загрузите zip-файл в контроллер пружинного упора, используя угловой 4 - PullRequest
0 голосов
/ 18 мая 2018

Я хочу загрузить файл .zip на сервер (контроллер пружинного упора) из angular 4. Пожалуйста, предложите, как это сделать?

заранее спасибо

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

После некоторого изучения я нашел ответ на вопрос, как загрузить файл (.zip / .txt / любой другой формат файла) из углового (4/5) в контроллер spring / rest.Записать мое обучение ниже для тех, кто ищет то же самое .:)

Кодирование переднего плана ::

1.HTML (например, UploadFile.component.html):

<input type="file" formControlName="uploadFile" (change)="uploadFileToServer($event)"/>

2.Компонент (например, UploadFile.component.ts):

import { Component } from '@angular/core';
import { RequestOptions, Headers, Http } from '@angular/http';
@Component({
  selector: 'file-uploader',
  templateUrl: './uploadFile.component.html',
  styleUrls: ['./uploadFile.component.css'],
})
export class FileUploadComponent {

public uploadFileToServer(event) {
  let fileList: FileList = event.target.files;
  if (fileList.length > 0) {
    let file: File = fileList[0];
    let formData: FormData = new FormData();
    formData.append('uploadFile', file, file.name);
    formData.append('fileType', 'zip');
    let headers = new Headers();
    headers.append('Accept', 'application/json');
    let options = new RequestOptions({ headers: headers });
    this.http.post('domain/urservice', formData, options)
      .map(res => res.json())
      .catch(error => Observable.throw(error))
      .subscribe(
      data => console.log('success'),
      error => console.log(error)
      )
  }
} 

}

(обратите внимание - этот коммуникационный серверный вызов должен присутствовать в некоторой услуге не в компоненте, а для простоты я пишу его в компоненте)

кодирование на стороне сервера ::

1.Контроллер Spring / Rest (FileUploadController.java):

    @RequestMapping(value = "/urservice", method = RequestMethod.POST)
    public void uploadFile(MultipartHttpServletRequest request) throws IOException {

    Iterator<String> itr = request.getFileNames();

    // directory to save file
    String tempDir = System.getProperty("jboss.server.temp.dir");

      MultipartFile file = request.getFile(itr.next());
      String fileType = request.getParameter("fileType");
      String fileName = file.getOriginalFilename();

      File dir = new File(tempDir);
      File fileToImport = null;
      if (dir.isDirectory()) {

        try {
            fileToImport = new File(dir + File.separator + fileName);
            BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(fileToImport));
            stream.write(file.getBytes());
            stream.close();
        } catch (Exception e) {
            logger.error("Got error in uploading file.");
        }

}
0 голосов
/ 18 мая 2018

1) Посмотрите здесь: https://angular.io/guide/http#making-a-post-request

Таким образом, вы можете создать сервис, который запускается при нажатии кнопки Отправить в форме, которая присоединяет файл, независимо от того, что это, zip, img илинезависимо от запроса POST.

2) В вашем шаблоне вы можете использовать что-то похожее:

<form>
  <input type="file" accept=".zip,application/octet-stream,application/zip,application/x-zip,application/x-zip-compressed">
  <input type="submit">
</form>

3) Посмотрите здесь, чтобы форсировать расширение файла: https://www.hongkiat.com/blog/css3-attribute-selector/

...