Загрузите .do c, полученный из Java REST API, в Angular - PullRequest
0 голосов
/ 30 апреля 2020

Проблема в том, что при получении ResponseEntity от angular java он получает его как Blob, но загружаемое слово неверно, это слово с путем, где правильный файл равен

    private aFile() {
    this.rest.aFile(this.formData)
      .subscribe(res => {
        this.contenidoFile = res;

        var blob = new Blob([this.contenidoFile], { type: 'application/octet-stream' });

     saveAs(blob, "createdocument.doc");

      }, (err) => {
        console.error(err);
        alert('Ha habido un error');
      });
  }

 aFile(formData: FormData) {
    return this.http.post(PATH_FILE, formData, {
      responseType:'blob'
    });
  }

Код в Java:

 @PostMapping("/file")
    public ResponseEntity<File> docFileV1(
        @RequestParam("file") MultipartFile originalFile) {

        return ResponseEntity.ok(docService.processDocFile(originalDocFile));

    }

Например, текст оригинального Word будет «Привет, как это документ Word», вместо текста документа Word, который angular загрузок:
"C: \ var \ tmp \ DocWork \ bcc272d8-fda c -4384-97b c -1fdc5dd5736b \ document.do c"

В других слова, путь, по которому слово, которое я хочу скачать, преобразуется в слово, как я могу загрузить оригинальное слово вместо его пути?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

попробуйте следующим образом, я протестирую его с помощью. net основной серверной части

- это свойства ответа console.log для печати, такие как response.body?

import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
import { HttpClient, HttpHeaders } from '@angular/common/http';

@Injectable()
export class FileService {

  constructor(private http: HttpClient) {
  }

  get(url: string) { 

    const formData = {};
    return this.download(url, formData)
      .subscribe((response) => {

        console.log(response);

        let file = new Blob([response.body], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"});

        if (window.navigator && window.navigator.msSaveOrOpenBlob) {
          const name = "test";
          window.navigator.msSaveOrOpenBlob(file, name);
        } else {
          const fileUrl = URL.createObjectURL(file);
          const child = window.open(fileUrl);
        }
      });
  }

  download(url: string, formData): Observable<any> {
    const requestOptions : any = {
        observe: "response",
        responseType: "blob",           
        headers: new HttpHeaders({
          "Accept": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
        })
    };
    const request = new Request(requestOptions);
    return this.http.post(url, formData, requestOptions);
  }
}
0 голосов
/ 30 апреля 2020

Попробуйте использовать этот код для загрузки файла вместо saveAs :

 var blob = new Blob([this.contenidoFile], { type: 'application/octet-stream' });
const e = document.createEvent("MouseEvents"),
      a = document.createElement("a");
    a.download = "data.docx";
    a.href = window.URL.createObjectURL(blob);
    a.dataset.downloadurl = ["application/octet-stream", a.download, a.href].join(":");
    e.initEvent("click", true, false);
    a.dispatchEvent(e);
...