Я пытаюсь загрузить файл (файл может иметь различные расширения, а не только конкретное).С сервера я получаю массив 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();
});
}
Я ожидал скачатьфайл не поврежден, но поврежденный файл загружен.