Как скачать файл с помощью angular и springbot - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь загрузить файл (файл может иметь различные расширения, а не только конкретное).С сервера я получаю массив byte [], но на клиенте файл поврежден.

Я попытался 1. отправить с сервера файл ресурсов 2. отправить с сервера файл InputStream

Это код из myBatis, метод SQL

<resultMap id="downloadAttachmentMap" type="Document">
    <result column="id" property="id"/>
    <result column="fileName" property="fileName"/>
    <result column="docFile" property="docFile" javaType="_byte[]" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.ByteArrayTypeHandler"/>
</resultMap>

<select id="downloadDocumentById" resultMap="downloadAttachmentMap" parameterType="Long">
         SELECT td.id,
           TD.DOC_FILE_NAME      fileName,
           td.DOC_FILE            docFile
    FROM TAB_DOCUMENTS td
    WHERE td.id = #{docId}

</select>

, который возвращает объект Document с полем типа byte [].

  @GetMapping(value = "/download-document/{id}")
   public Document downloadEmpDocument(@PathVariable Long id) {
      Document doc =  employeeService.downloadDocument(id);
      return doc;
  }

Это метод изслужба на стороне клиента:

 downloadEmpDocument(docId: number): Observable<Document>{
       return this
           .http
           .get<Document>(`${this.envConfig.baseUrl}/employee/download-document/${docId}`);
}

И, наконец, вот метод от клиента, который я пытаюсь загрузить файл, зная его идентификатор.

downloadDocument(document: Document) {
    this.employeeService.downloadEmpDocument(document.id)
        .subscribe(doc => {
        const blob = new Blob([doc.docFile], {type:  "attachment; filename=\""+doc.filename+"\""});

         var link = document.createElement('a');
         link.href = window.URL.createObjectURL(blob);
         link.download = doc.fileName;
         link.click();
        });
}

Я ожидал скачатьфайл не поврежден, но поврежденный файл загружен.

...