我正在尝试下载文件(该文件可以具有各种扩展名,而不仅仅是特定的扩展名)。我从服务器上确实收到了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}`);
}
最后,这是来自客户端的方法,我正在尝试下载知道其ID的文件。
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();
});
}
我希望下载的文件没有损坏,但是下载了损坏的文件。