url接口返回链接附件地址,直接下载不预览

该代码段展示了如何使用JavaScript的fetchAPI从URL获取数据并转换为blob,然后创建一个下载链接供用户下载。函数DirectDownloadFn接受文件URL和可选的文件名,如果未提供文件名,则会生成一个随机名称。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

export default {

    DirectDownloadFn(fn, name) {

        const a = document.createElement('a')

        //   let url = baseUrl + binding.value // 若是不完整的url则需要拼接baseURL

        const url = fn // 完整的url则直接使用

        // 这里是将url转成blob地址,

        fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址

            a.href = URL.createObjectURL(blob)

            // //console.log(a.href)

            if (name) {

                a.download = name; // 下载文件的名字

            } else {

                a.download = Math.floor(Math.random() * (1000 - 1)) + 1 || '' // 下载文件的名字

            }

            document.body.appendChild(a)

            a.click()

            //在资源下载完成后 清除 占用的缓存资源

            window.URL.revokeObjectURL(a.href);

            document.body.removeChild(a);

        })

    }

}

import DirectDownload from '@/utils/Dpdf.js';

DirectDownload.DirectDownloadFn(Url地址, "附件名");

 

### 如何在 Vue 的富文本编辑器中实现文件流的预览下载功能 要在 Vue 中通过富文本编辑器实现文件流的预览下载功能,可以按照以下方式设计解决方案: #### 1. **文件上传至富文本编辑器** 为了支持 PDF 或其他类型的文件上传到富文本编辑器中,可以通过自定义插件或事件监听来处理文件上传逻辑。以下是基于 TinyMCE 和 Quill 编辑器的具体实现。 ##### 使用 TinyMCE 实现文件上传 TinyMCE 提供了一个 `file_picker_callback` 属性用于处理文件选择和上传逻辑[^5]。当用户点击插入文件按钮时,触发该回调函数完成文件上传并返回 URL 地址以便嵌入到编辑器内容中。 ```javascript import tinymce from '@tinymce/tinymce-vue'; export default { components: { Editor: tinymce }, data() { return { editorContent: '', editorInitOptions: { file_picker_types: 'file image media', file_picker_callback: (callback, value, meta) => { const input = document.createElement('input'); input.setAttribute('type', 'file'); input.setAttribute('accept', 'application/pdf'); // 只允许PDF文件 input.onchange = () => { const file = input.files[0]; if (!file) return; const formData = new FormData(); formData.append('file', file); fetch('http://your-upload-endpoint.com/upload', { method: 'POST', body: formData, }) .then((response) => response.json()) .then((result) => callback(result.url)) // 返回文件URL给编辑器 .catch(() => alert('Upload failed')); }; input.click(); } } }; } }; ``` ##### 使用 Quill 实现文件上传 对于 Quill 编辑器,则需重写其图片或其他媒体插入行为以适应文件上传需求[^4]。 ```javascript methods: { handleFileInsert(file) { let formData = new FormData(); formData.append('file', file); this.$axios.post('/upload', formData).then(response => { const range = this.quill.getSelection(true); if (range !== null && typeof(range.index) === 'number') { this.quill.insertEmbed(range.index, 'image', `${this.fastDfsUrl}${response.data}`); } else { console.error("Selection not found"); } }).catch(error => { console.error("Error uploading", error); }); } } ``` #### 2. **文件流预览** 针对同浏览器环境下的兼容性考虑,通常会采用如下两种策略之一来进行文件流在线预览: - 利用 `<iframe>` 标签加载目标资源; - 借助第三方库如 pdf.js 来解析渲染 PDF 文档。 示例代码展示如何利用 iframe 显示远程存储服务上的 PDF 文件链接作为附件形式附加于文章正文部分之后显示出来[^2]: ```html <template> <div> <!-- 正文 --> <div class="content">{{ content }}</div> <!-- 如果存在附件则显示 --> <a v-if="attachmentLink" target="_blank" :href="attachmentLink">查看附件</a> <!-- 预览区域 --> <iframe v-if="isPdfPreviewVisible" width="100%" height="600px" frameborder="no" :src="previewSrc"></iframe> </div> </template> <script> export default { props: ['content'], computed: { attachmentLink() { // 解析 HTML 字符串中的 a 标记 href 属性获取实际文件路径 const parser = new DOMParser().parseFromString(this.content, "text/html"); const links = Array.from(parser.querySelectorAll('a')).filter(a => /\.pdf$/.test(a.href)); return links.length ? links[0].href : ''; }, isPdfPreviewVisible() { return !!this.attachmentLink; }, previewSrc() { return `/api/proxy?url=${encodeURIComponent(this.attachmentLink)}&token=YOUR_ACCESS_TOKEN`; } } }; </script> ``` 这里假设后端提供了一种代理接口 `/api/proxy` 负责转发请求同时附带认证令牌确保安全性[^3]。 #### 3. **文件流下载** 最后关于文件流下载方面,只需简单设置 HTTP 头部 Content-Disposition 参数指示客户端保存而非打开即可[^1]。 后台 PHP 示例: ```php <?php header('Content-Type: application/octet-stream'); header("Content-Disposition: attachment; filename=\"".basename($filePath)."\""); readfile($filePath); exit; ?> ``` 前端调用此 API 即可触发动态生成的内容导出流程。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值