初学者123
初学者123
  • 发布:2020-06-19 10:19
  • 更新:2023-04-21 11:07
  • 阅读:1259

plus.net.XMLHttpRequest报错:ReferenceError: Can't find variable: location 怎么破?

分类:HTML5+
xhr

场景:选择本地视频后,获取文件信息,方便上传到华为云OBS
安卓真机测试

开始使用的是js的XMLHttpRequest,报TypeError,XMLHttpRequest is not defined.搜索社区后,应该是跨域问题,建议使用plus.net.XMLHttpRequest。但仍然报错,而且没看到类似的问答。代码如下:

//获取本地视频  
            select_video(){  
                var _this = this;  
                uni.chooseVideo({  
                    maxDuration:30,  //拍摄视频最长拍摄时间,单位秒  
                    count:1, //上传视频的数量  
                    sourceType:['camera','album'],  
                    success: (res) => {  
                        var timestamp = Date.parse(new Date()).valueOf();  
                        console.log(timestamp)  
                        _this.preview_video = res.tempFilePath;  
                        var xhr = new plus.net.XMLHttpRequest();  
                        xhr.open('GET', res.tempFilePath, true);  
                        xhr.setRequestHeader("Content-type", "application/json; charset=utf-8");  
                        xhr.responseType = 'blob';  
                        xhr.onload = function(e) {  
                            if (this.status == 200) {  
                                _this.video_src = this.response;  
                                _this.video_name = timestamp + '.' + _this.video_src.type.split("/")[1];  
                                console.log(_this.preview_video)  
                                console.log(_this.video_src)  
                                console.log(_this.video_name)  
                                _this.selected = true;  
                                _this.is_video = 1;  
                            }  
                        };  
                        xhr.send();  
                    },  
                })  
            },  

真机测试时,控制台打印:

09:57:48.315 App Hide at App.vue:10
09:57:52.182 App Show at App.vue:7
09:57:52.257 [Number] 1592531873000 at pages/release/release.vue:169
09:57:52.282 ReferenceError: Can't find variable: location
10:02:52.297 App Hide at App.vue:10

2020-06-19 10:19 负责人:无 分享
已邀请:
风云杭州

风云杭州

后来成功上传到obs服务器了吗? 我目前也面临这个问题

  • 初学者123 (作者)

    在H5可以成功上传,在真机上不行

    2020-08-14 12:49

风云杭州

风云杭州

https://ask.dcloud.net.cn/article/983
你看下这篇文章,是不是要用plus.uploader 来上传才行?

初学者123

初学者123 (作者) - 80后IT男

使用华为云存储的关键,不在这个过程,过程是可以走得通的,严格按照华为云的官方示例代码去做就可以。
关键的问题在于:华为云存储对上传对象的要求,不能是blob文件格式,必须是window.file格式,这个在h5端是可以轻松做到的,但是在真机端,貌似只支持从chooseimage或choosevideo成功后的回调函数中,只提供blob格式的待上传文件信息。
我后面放弃从前端直传华为云的另一个关键原因是安全考虑,正如你推荐的那篇文章中也提到,必须把华为云的AK,SK写在前端页面中。所以,建议换思路做,比如上传到后台,让后台再上传到华为云

风云杭州

风云杭州

我现在就是先上传后台,然后后台再上传到华为云obs, 但这样带来的就是 上传速度变慢了。

从chooseimage或choosevideo成功后的回调函数中 返回的是 file:// 格式的呀

9***@qq.com

9***@qq.com

楼主,您好,目前有解决上面的问题嘛

要回复问题请先登录注册