Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在没有错误的情况下尽早关闭大有效载荷(图像)请求的正确方法

在没有错误的情况下尽早关闭大有效载荷(图像)请求的正确方法
EN

Stack Overflow用户
提问于 2022-06-02 17:59:09
回答 1查看 114关注 0票数 0

最简单的http处理程序func,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pub async fn new(mut payload: web::Payload) -> Result<impl Responder> {
    return Ok("ok");
}

将引发日志中的错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[2022-06-03T01:39:58Z DEBUG actix_http::h1::dispatcher] cannot read request payload
[2022-06-03T01:39:58Z DEBUG actix_http::h1::dispatcher] handler dropped payload early; attempt to clean connection
[2022-06-03T01:39:58Z ERROR actix_http::h1::dispatcher] handler did not read whole payload and dispatcher could not drain read buf; return 500 and close connection
[2022-06-03T01:39:58Z ERROR actix_http::h1::dispatcher] stream error: Handler dropped payload before reading EOF

似乎是因为我们没有消耗有效载荷。

有办法解决这个问题吗?

我真正想做的是像这样保护一个处理程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pub async fn new(user: User, mut payload: web::Payload) -> Result<impl Responder> {
    /*
      Do something with payload.
    */
}

当用户实现FromRequest特性时,它在其from_request函数中将返回用户或返回未经授权的错误。

因此,如果有未经授权的用户调用处理程序,它将提前返回ErrorUnauthorized。但这将适用于stream error: Handler dropped payload before reading EOF

EN

回答 1

Stack Overflow用户

发布于 2022-07-31 16:42:37

这听起来类似于:

https://github.com/actix/actix-web/issues/2695

在返回响应/错误之前,可能需要耗尽有效负载。你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
payload.for_each(|_| ready(())).await;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
while let Ok(Some(_)) = payload.try_next().await {}

我在处理多部分文件上传时遇到了类似的问题。但是,在大多数情况下,如选项一所述,耗尽有效负载在某些情况下是有效的,例如用户点击浏览器上的“停止”或“刷新”按钮,中断发生在流上循环时,读取有效负载块将出错“不完全”。试图将流转换为未来并在其上运行for_each()将无限期地挂起。备选案文二始终有效。

假设您的问题是相互关联的,希望它应该在v4.2中得到解决,尽管在像您这样处理有效负载时,您可能仍然需要对其进行一些内务处理。

就授权注释而言,您可以通过多种方式这样做。在中间件中有一种选择:

Rust Actix - early return from middleware

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72483998

复制
相关文章
Python 如何移除旧的版本特性,如何迎接新的特性?
2020 年 4 月 20 日,Python 2 的最后一个版本 2.7.18 发布了,这意味着 Python 2 是真正的 EOL(end of life)了,一个时代终于落幕了。
Python猫
2020/04/26
8420
EasyNVR新内核版本如何更改录像存储的位置?
大家知道我们前段时间一直在做EasyDSS新内核版本的测试,继EasyDSS后,EasyNVR也有了新内核版本,接下来的事件我们将会对EasyNVR进行一些常规测试,统计与旧版本用法不同的地方会告知大家。本文我们就先分享一下新版本的EasyNVR如何进行更改录像存储的位置。
EasyNVR
2021/07/29
2.6K0
EasyNVR新内核版本如何更改录像存储的位置?
EasyNVR新内核版本如何更改录像存储的位置?
大家知道我们前段时间一直在做EasyDSS新内核版本的测试,继EasyDSS后,EasyNVR也有了新内核版本,接下来的事件我们将会对EasyNVR进行一些常规测试,统计与旧版本用法不同的地方会告知大家。本文我们就先分享一下新版本的EasyNVR如何进行更改录像存储的位置。
TSINGSEE青犀视频
2021/07/28
2.1K0
FatFs检测并建立多层目录并更改文件名
FatFs检测文件路径是否存在,不存在就建立多层目录,最后更改文件名 if(W_Dresult==FR_OK) { wifi_dp_wav_file_status=0; start_downloading=0; /*************************************遍历创建文件夹*************************************************************/ u8 opendir_err = 0; /
小锋学长生活大爆炸
2020/08/13
1.8K0
git比较两个版本之间的区别
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/113106.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/07
1.3K0
python比较两个文件的差异
使用python脚本比较两个文件的差异内容并输出到html文档中,可以通过浏览器打开查看。
py3study
2020/01/07
4.6K0
.NET 下最快比较两个文件内容是否相同
为了选出最优的解决方案,我搭建了一个简单的命令行工程,准备了两个大小为912MB的文件,并且这两个文件内容完全相同.在本文的最后,你可以看到该工程的Main方法的代码.
郑子铭
2023/08/30
3480
.NET 下最快比较两个文件内容是否相同
如何查找SAP的旧TCODE对应新的TCODE
SAP随着新版本的发布,我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE,新TCODE有很多的新特性和新功能。在这个这种情况下,很多旧TCODE就会被废弃。我们如何查找这个替换呢?
matinal
2020/11/27
4390
如何查找SAP的旧TCODE对应新的TCODE
新内核版EasyNVR如何更改录像文件的存储位置?
TSINGSEE青犀视频在去年对旗下的视频平台EasyGBS、EasyNVR、EasyCVR等,均更换为了新的流媒体内核,新内核版的视频平台性能更加稳定、流畅、灵活。新内核版EasyNVR平台有默认的录像存储位置(EasyNVR/mediaserver/data/hls),同时我们的平台也支持用户根据需求,将录像文件存储在其他指定的磁盘。
TSINGSEE青犀视频
2022/04/06
2K0
[Linux] 使用awk比较两个文件的内容
当需要比较A , B两个文件 , A文件中存在 , 并且把也在B文件中存在的行去除掉 , 可以使用这个awk的用法来
唯一Chat
2019/12/26
2.9K0
【说站】如何检查文件是否有Python的符号链接?
2、使用is_symlink()方法时必须小心。只要命名对象是符号链接,即使链接的目标不存在,它也会返回True。
很酷的站长
2022/11/24
2.7K0
【说站】如何检查文件是否有Python的符号链接?
[PHP] 检测文件是否有病毒的实现逻辑
在用户收到发送过来的文件后 , 要能够检测出这个文件是否是病毒 , 核心的软件是clamav , 可以在linux命令行执行,检测文件或目录里的病毒
唯一Chat
2020/03/27
6420
[PHP] 检测文件是否有病毒的实现逻辑
【SAP技巧】如何查找SAP的旧TCODE对应新的TCODE
SAP随着新版本的发布,我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE,新TCODE有很多的新特性和新功能。在这个这种情况下,很多旧TCODE就会被废弃。我们如何查找这个替换呢?
matinal
2020/11/10
7670
【SAP技巧】如何查找SAP的旧TCODE对应新的TCODE
比较两个vcf文件的多种实现方法
可以看到,新的vcf文件的突变位点数量远大于旧的vcf文件。仔细查看新vcf文件,**发现是没有做基本过滤,比如测序深度大于20等等指标。**所以我就顺便把它过滤一波,代码如下:
生信技能树
2020/07/16
2.9K0
比较两个vcf文件的多种实现方法
js 比较两个日期大小,比较同一天两个时间大小
比较两个日期大小 js 比较两个日期大小有两种方法 方法一: //比较两个日期大小。格式:2018-8-12 12:30 const compareDate = (d1, d2) => { return ((new Date(d1.replace(/\-/g, "\/"))) > (new Date(d2.replace(/\-/g, "\/")))); } 方法二: //比较两个日期大小。格式:2018-8-12 12:30 const compareDate2 = (d1, d2) => { l
solocoder
2022/04/06
5.5K0
python比较两个list的内容是否相同_python爬虫实例
>>> import re,urllib.request >>> from bs4 import BeautifulSoup >>> from lxml import etree >>>
全栈程序员站长
2022/10/03
9570
python比较两个list的内容是否相同_python爬虫实例
如何在 Ubuntu Linux 中更改 DNS 并解决一些网速慢的问题?
在本指南中,我们将教您如何将 Ubuntu 中的 DNS 更改为您想要的任何内容。在某些情况下,更改 DNS 可以大大提高您的Internet连接速度。
网络技术联盟站
2022/06/09
5.2K0
如何在 Ubuntu Linux 中更改 DNS 并解决一些网速慢的问题?
点击加载更多

相似问题

比较两个版本的文件并将更改应用于旧文件

12

比较目录和压缩目录(是否有新的更改)

111

.NET:是否有内置版本的PropertyChangedEventArgs包含旧/新值?

22

比较旧文件和新更新记录的文件,并在旧文件中插入新记录

21

比较旧目录和新目录,并重新压缩已更改的文件

32
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文