欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > vue3使用后端传递的文件流进行文件预览

vue3使用后端传递的文件流进行文件预览

2024/12/22 21:45:21 来源:https://blog.csdn.net/qq_42261895/article/details/144239196  浏览:    关键词:vue3使用后端传递的文件流进行文件预览

文章目录

    • 一、 注意事项
        • 1、responseType设置为:arraybuffer
        • 2、Blob设置type,来源于后台封装的response.headers['content-type']
        • 3、使用encodeURIComponent(),避免符号影响文件名
    • 二、java接口

一、 注意事项

1、responseType设置为:arraybuffer
2、Blob设置type,来源于后台封装的response.headers[‘content-type’]
3、使用encodeURIComponent(),避免符号影响文件名
function previewFile(file) {let newName = file.fileNewNamelet filePath = file.filePathlet path = filePath+newNamelet encodedFileName =  encodeURIComponent(path)const lowerCaseFileName = newName.toLowerCase();const fileExtension = lowerCaseFileName.split('.').pop();const allowedExtensions = ['pdf', 'jpg', 'jpeg', 'png'];if (allowedExtensions.includes(fileExtension)) {let service = axios.create({baseURL: '/fjxz',responseType: 'arraybuffer',timeout: 60000,headers: {'Content-Type': 'application/octet-stream',},withCredentials: true,});service.get(`/system/fileupload/preview/file?filePath=${filePath + newName}`).then((response) => {console.log(response)let contentType = response.headers['content-type'];let blob = new Blob([response.data], {type: contentType});let link = document.createElement('a');link.href = window.URL.createObjectURL(blob);link.target = "_blank";link.click();}).catch((error) => { })} else {ElMessage({message: '只有PDF和图片才能预览!',type: 'warning',})}}

二、java接口

@GetMapping("/preview/file")
public void filePreview(HttpServletResponse response, @RequestParam("filePath") String filePath){try {String extension = getFileExtension(filePath);String mimeType = getMimeType(extension);// 设置响应头response.setContentType(mimeType);String encodedFileName = URLEncoder.encode(getFileName(filePath), "UTF-8");response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedFileName + "\"");FileInputStream fis = new FileInputStream(fileSavePath + filePath);ServletOutputStream os = response.getOutputStream();byte [] b = new byte[1024*8];while(fis.read(b)!=-1){os.write(b);}fis.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com