uni.downloadFile 报错has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
时间: 2024-05-24 21:09:36 浏览: 255
uni.downloadFile 是uni-app框架提供的一个用于下载文件的API,可以用于下载远程文件到本地。由于浏览器的同源策略,当我们使用该API下载远程文件时,如果请求的服务器与当前页面所在的服务器不在同一域下,则浏览器会拒绝该请求,从而导致报错。
这个问题通常可以通过在服务器端添加CORS头来解决,具体来说就是在响应头中添加 Access-Control-Allow-Origin 字段,允许跨域请求。如果你没有权限更改服务器的响应头,也可以尝试将下载的文件放置在同一域下,或者使用代理服务器等方式绕过这个限制。
相关问题
function perviewFiles(path) { if (readMark) { console.log("预览文件", readMark) var ext = path.substr(path.lastIndexOf(".") + 1); let fullPath = URL + path let imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif', 'mp4']; let ifImg = imglist.find(item => item === ext); if (ifImg) { let list = [] list.push(fullPath) uni.previewImage({ urls: list, }) } else { uni.showLoading({ title: '加载中,请稍候···', mask: true }); readMark = false console.log('正在为您加载数据,请稍候片刻', readMark) downloadTask = uni.downloadFile({ url: fullPath, success: function(res) { console.log(res) uni.getFileSystemManager().saveFile({ tempFilePath: res.tempFilePath, success: function(res) { console.log(res) var savedFilePath = res.savedFilePath; uni.openDocument({ filePath: savedFilePath, showMenu: true, success: function() { uni.hideLoading({ noConflict: true }); readMark = true console.log("打开文档成功", readMark); }, fail: function(res) { uni.hideLoading({ noConflict: true }); uni.showToast({ title: '暂不支持此类型', duration: 2000, icon: "none", }); } }) }, fail(res) { uni.showModal({ content: JSON.stringify(res), showCancel: false }); } }); }, fail: function(res) { console.log(res) uni.hideLoading(); uni.showModal({ content: JSON.stringify(res), showCancel: false }); } }); } } } 说出这段代码可能存在的问题
根据给出的代码,可能存在以下几个问题:
1. 变量 `readMark` 的作用和初始化没有给出,无法确定其具体含义和取值范围。
2. 变量 `URL` 没有给出定义,无法确定其具体的值和来源。
3. 函数中的逻辑判断 `if (readMark)` 没有明确给出 `readMark` 的取值范围,可能导致逻辑判断出错。
4. `path` 参数在函数内部使用了 `substr()` 方法,如果 `path` 的值为空或者不符合预期,可能会导致错误。
5. 在预览图片时,代码只支持单个图片的预览,如果 `list` 数组中有多个图片路径,只会预览第一个图片。
6. 当文件类型不是图片时,代码会进行文件下载和打开操作,但没有对文件大小、下载速度等进行限制,可能导致用户等待时间过长或者网络请求失败。
7. 文件下载完成后,没有对下载失败的情况进行处理,只是简单地输出错误信息。
8. 在打开文档失败时,只是简单地显示一个提示信息,没有提供更详细的错误提示或者其他处理方式。
以上是我对给出代码的初步分析,仅供参考。如果你有更具体的问题或者需要更详细的解答,请提供更多相关信息。
uni.downloadFile
我明白了,你想要下载文件。对于下载文件,你可以使用`uni.downloadFile`函数。该函数是在uni-app框架中用于下载文件的方法。
你需要提供一个包含文件地址的URL,并指定下载后保存的路径。示例代码如下:
```javascript
uni.downloadFile({
url: 'https://example.com/file.txt',
success: function(res) {
if (res.statusCode === 200) {
uni.saveFile({
tempFilePath: res.tempFilePath,
success: function(res) {
console.log('文件保存成功', res.savedFilePath);
},
fail: function(err) {
console.log('文件保存失败', err);
}
});
}
},
fail: function(err) {
console.log('文件下载失败', err);
}
});
```
以上代码会从指定的URL下载文件,并将其保存到临时文件路径中。如果下载成功,你可以通过`uni.saveFile`方法将文件保存到指定位置。
请注意,上述代码是针对uni-app框架的,并使用了uni-app提供的API。如果你在其他开发环境中使用,请根据相应的开发框架和API进行相应的调整。
阅读全文