再浏览器中需要从A服务器下载一个500M的文件(甚至更大),然后上传到B服务器,目前使用xhr方式直接下载和上传,但在过程中很卡,内存占用也很高。能否优化成从A服务器下载的过程中直接拿到响应流读取数据,每次读取就直接往B服务器的上传的请求流中写入,那数据就不需要暂存在浏览器。
使用fetch api可以拿到响应流读取数据,但是好像没有api可以向请求流中写数据
确实,浏览器把从A服务器下载文件需要的东西,如,url,token啥的,
告诉B服务器,让B服务器,直接在服务器上从A服务器下载文件即可
你为什么不在 B 服务器直接 fetch
文件不就好了?
不管在不在一个机房,你有第三方能同时触及两个机器,那么两个机器就应该可以互访。而且你也不一定非要用浏览器,在第三方机器上跑 node.js 不是一样的效果?
fetch('/file.zip').then((resp) => { fetch('/upload', { body: resp.body, method: 'POST', duplex: 'half' });});
注意:目前safari不支持请求流; http1.1不支持请求流,需要HTTP2以上的协议版本
参考: https://developer.chrome.com/docs/capabilities/web-apis/fetch...
你的问题很有趣,并且是一个常见的浏览器端数据传输优化的问题。
首先,对于你的需求,你可以考虑使用WebRTC(Web实时通信)技术。WebRTC允许在浏览器之间直接传输数据,而不需要经过服务器。这可以大大减少数据传输的延迟和服务器负载。
但是,如果你的需求是从一个服务器下载文件,然后上传到另一个服务器,WebRTC可能并不适用。因为WebRTC主要用于点对点的实时通信,而不是用于文件传输。
在这种情况下,你可以考虑使用fetch
API和Streams API
结合来实现你的需求。你可以使用fetch
API从A服务器下载文件,然后使用Streams API
将数据流式传输到B服务器。
下面是一个简单的示例代码:
// 创建可读流const reader = response.body.getReader();// 创建可写流const writer = btoa(new TextEncoder().encode('')); // 初始化写入的数据const writable = new Blob([writer], {type: 'text/plain'}); // 创建可写流const sink = writer.write.bind(writer); // 获取写入方法// 创建管道new StreamPipe(reader, sink, writable);
在这个示例中,我们使用fetch
API从A服务器下载文件,然后创建一个可读流(reader)。然后,我们创建一个可写流(writable),并使用StreamPipe
类将可读流和可写流连接起来。这样,数据就可以从可读流直接传输到可写流,而不需要暂存在浏览器中。最后,我们可以将可写流上传到B服务器。
请注意,这只是一个简单的示例代码,可能需要根据实际情况进行修改和调整。另外,由于浏览器的安全限制,你可能需要使用HTTPS协议来传输数据。
本文向大家介绍JavaScript实现的浏览器下载文件的方法,包括了JavaScript实现的浏览器下载文件的方法的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家贴代码了,具体代码如下所示: 该方法从网上找来的,直接调用,使用直接传路径,就可使用 总结 以上所述是小编给大家介绍的JavaScript实现的浏览器下载文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,
欢迎来到优分享浏览器开源项目 优分享浏览器 优分享浏览器是安卓平台下的一个多标签的简洁移动网页浏览器源代码全部开放,你可以自由改进它或者基于它制作一些独特的工具,也可以嵌入到你的APP中提供移动网页浏览或分享功能。你可以点击页面中的图片以便分享该图片到社交网络。 欢迎下载试用 下载优分享浏览器安卓APP 您可以先下载试用其功能后,然后下载源代码 马上开始用源代码来生成安卓APP吧: 1.打开win
问题内容: 这就是我们防止浏览器缓存JS和CSS文件的方式。这似乎有点hacky ..有更好的方法吗? 更新:我们要防止缓存的原因是为了确保在执行新发行版时加载较新版本的文件。 问题答案: 您希望缓存CSS和JS。当它们回来时,它加快了网页的加载。添加时间戳后,您的用户将不得不一次又一次下载它。 如果要确保它们始终具有新版本,则要使构建系统在文件末尾添加一个构建号而不是时间戳。 如果您只是在开发中
我用 react 写了几个页面,其中有几个页面是需要登录后才能够使用,我当前的判断方式是将获取到的 token 保存在浏览器的 localStorage 里,然后访问这些页面的时候,读取浏览器里是否有 token,然后将 token 发送到服务器验证。 我想请问,每次访问这些需要登录的页面,都会发一次到服务器做验证,这样的方式是不是太频繁了?还有其他更优越的方式吗?
本文向大家介绍JavaScript Web浏览器中的事件循环,包括了JavaScript Web浏览器中的事件循环的使用技巧和注意事项,需要的朋友参考一下 示例 绝大多数现代JavaScript环境都是根据事件循环工作的。这是计算机编程中的一个常见概念,从本质上讲意味着您的程序不断等待新事物发生,并且当新事物发生时对其做出反应。在主机环境调用到你的程序,在产卵事件循环,然后一个“转”或“嘀”或“任
问题内容: 如何使用JavaScript确定确切的浏览器和版本? 问题答案: 顾名思义,这将告诉您浏览器提供的名称和版本号。 当您在多个浏览器上测试新代码时,它对于对测试结果和错误结果进行排序非常方便。