推荐 最新
米小米会努力

fetch 如何发送复杂表单到PHP后台,接收并存储?

请问:一个表单里既有普通字段,也有一个文件上传的字段,是否可以使用fetch实现提交表单? 前提是使用 json 格式发送,也就是说文件的字段需要转换成字符串。 后台 PHP 使用 file_get_contents('php://input'), true) 进行接收。 请问该把需要上传的文件转换成什么?目前只知道图片可以转成 base64 ,那如果是其他格式呢,比如压缩包应该怎么整? 是不是这类不仅仅是文件上传的表单,不适合使用 fetch 进行操作。 从网上已经查过一些资料,但是并没有找到。 部分参考 "https://blog.51cto.com/lxw1844912514/2941481" (https://link.segmentfault.com/?enc=24NoTMNp0dVv2GleGDkyRQ%3D%3D.iR%2FYbB4woh4xFYyWSSrNIvGwfxGabIRxKffZqk%2FT7ycLZ1n3oIO4ZtyuF5nedsqK) "https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader" (https://link.segmentfault.com/?enc=A4fJIlYVcrBtxS%2FgxZZiuw%3D%3D.8TTAsh33YKqkXmzetJjc2HFLw9uj4ILg%2FdI4EavNGyerm7LIUPHvh%2BvI%2Frcin%2BQFPRH%2BzwitGOHhqqN9Twf2mA%3D%3D) "https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refer..." (https://link.segmentfault.com/?enc=3UFry4Kzae%2Bme85ok59Hkw%3D%3D.IHw0W90x97TpBaLCAUApxsj7MLkyFisdy8OKW4PLyn3a0g2lX7vYN9OimAIp%2BPajpEoE5xznsGZOdYgqoQQonBAOKJABJnQLwIchHa58zkXhbR1QuRnaPaBhv1aYguEv)

14
1
0
浏览量295
疯狂的搬运工

前端使用fetch请求streams api,使用read()处理返回的response时,为什么第一次会出现阻塞?

使用fetch请求streams api的,当请求开始响应的时候,使用read()将返回的流式数据转成可展示的数据,然后通过while循环重复以上过程达到流式展示的效果; 问题: 第一次使用read()解析返回数据的时候,会执行很长时间,阻塞了后续执行;之后会将请求每次返回的数据一次性处理执行;造成的实际页面效果是:页面会空白很长时间,然后突然把所有的数据展示出来了,失去了流式的效果; const response = await fetch(url, { method: 'POST', headers: { [Authorization]: getAuthorization(), 'Content-Type': 'application/json', }, body: JSON.stringify(body), }); const reader = response.body ?.pipeThrough(new TextDecoderStream()) .pipeThrough(new EventSourceParserStream()) .getReader(); while (true) { // 第一次console时间 console.log(new Date().getTime()); const x = await reader?.read(); // 第二次console时间 console.log(new Date().getTime()); if (x) { const { done, value } = x; console.log('value', value) try { // 处理展示streams数据 } catch (e) { console.warn(e); } if (done) { console.info('done'); break; } } } 第一次和第二次时间打印之间间隔了几十s,是因为await reader?.read();语句导致的,但不知道什么原因导致的; 之后循环的每一次过程2此时间打印间隔都很小且都为流式数据正确的结果,从循环第二次开始到循环结束大概只有几十ms的时间; 造成的影响就是页面空白了几十s,然后所有的数据就突然展示出来,并不是每个字轮流出现的效果; 有没有大佬能帮忙,是因为第一次的read()执行将之后所有的返回数据都处理了并等待streams api达到done状态后才执行后面的内容造成了阻塞效果,还是因为其它原因。 同一个服务接口用在其它页面上是能展示正确的流式输出效果的;

0
1
0
浏览量197
饼干爱折腾

浏览器文件中转优化方式?

再浏览器中需要从A服务器下载一个500M的文件(甚至更大),然后上传到B服务器,目前使用xhr方式直接下载和上传,但在过程中很卡,内存占用也很高。能否优化成从A服务器下载的过程中直接拿到响应流读取数据,每次读取就直接往B服务器的上传的请求流中写入,那数据就不需要暂存在浏览器。 使用fetch api可以拿到响应流读取数据,但是好像没有api可以向请求流中写数据

0
1
0
浏览量16