当前位置: 首页 > 知识库问答 >
问题:

Rust:TCP流读取POST文件在Edge或Chrome浏览器中不起作用

何雅惠
2023-03-14

我有两个问题:我的生锈语言和我的英语语言;)

我用“use std::net::TcpListener;use std::net::TcpStream;”修改了一个迷你服务器从铁锈书的例子(https://doc.rust-lang.org/book/ch20-03-graceful-shutdown-and-cleanup.html)这段代码在Firefox浏览器常见的“表单”中运行得非常完美,它发送了一个带有明显“enctype='multipart/form data'”的“input type='file'”:

    let mut datax = Vec::new();
    let mut el_buffer = [0; 1024];
    let mut limita = 0;

    loop {
        let n = stream.read(&mut el_buffer).unwrap();
        if n<1024 {
            datax.extend_from_slice(&el_buffer[..n]);
            break;
        } else {
            datax.extend_from_slice(&el_buffer[..n]);
        }

        if limita >10000 {
            break;
        }
        limita += 1;
    }

我试着用:从头到尾读();读一字不差;新的(

结果是一样的:从Firefox读取所有文件,效果很好,但从Edge,Chrome,IE,删除了收到的帖子,浏览器失去了服务器连接。

提前感谢您的宝贵帮助。

共有2个答案

孙凌
2023-03-14

经过多次尝试和错误,谷歌,尝试和错误,谷歌。。。我找到了一个很好的解释,即“read()”函数不足以处理“stream”中的字节,所以我找到了名为“buf_redux”的很棒的工具,它取代了标准工具“std::io::BufReader”。我是这样用的:

在“Cargo.toml”中:

[dependencies]  
buf_redux = "0.8.4"

在“main.rs”中

    use buf_redux::BufReader;

    // ....

    let mut datax = Vec::new();
    let mut el_buffer = [0; 4096];
    
    // A 10 MBytes aprox.:
    let mut lector = BufReader::with_capacity(10240000, &mut stream);

    loop {
        let n = lector.read(&mut el_buffer).unwrap();
        println!("Bytes : {:?}", n);
        if n<4096 {
            datax.extend_from_slice(&el_buffer[..n]);
            break;
        } else {
            datax.extend_from_slice(&el_buffer[..n]);
        }
    }

我希望它能帮助别人

阎承
2023-03-14
        if n<1024 {
            datax.extend_from_slice(&el_buffer[..n]);
            break;
        } else {

Read::Read()返回小于完整大小的数字并不意味着已经到达输入的末尾。这可能意味着数据还不可用(例如,浏览器还没有发送数据),也可能是内核一时兴起的结果。

read()返回零时,应该结束阅读循环。这是唯一指定为“文件结束”的返回值。

 类似资料:
  • 本文向大家介绍JAVA读取文件流,设置浏览器下载或直接预览操作,包括了JAVA读取文件流,设置浏览器下载或直接预览操作的使用技巧和注意事项,需要的朋友参考一下 最近项目需要在浏览器中通过URL预览图片。但发现浏览器始终默认下载,而不是预览。研究了一下,发现了问题: // 设置response的Header,注意这句,如果开启,默认浏览器会进行下载操作,如果注释掉,浏览器会默认预览。 respons

  • 问题内容: 我在使用SWT浏览器组件时遇到了一些麻烦。我正在运行带有Sun的Java SE 1.6的Ubuntu 11.04 AMD64和Eclipse 3.7 我的问题是我的浏览器无法初始化。当我使用SWT.NONE标志实现时,出现错误 然后当我尝试使用SWT.MOZILLA标志时,我得到 我怀疑这部分是因为我正在使用XULRunner2,但是我更喜欢使用WebKit,在Eclipse 3.7中

  • 问题内容: 这是我的代码 这段代码在IE8中工作正常,但是在Firefox和Chrome浏览器中却失败了。当我检查XHR对象时,它表示状态码为0。我检查了所有其他问题,没有一个问题可以帮助我识别问题。 让我知道,如果我在这段代码中做错了什么。如果$ .ajax有一些兼容性问题,请提出与其等效的建议。 更新: 我们在http://www.xml.com/pub/a/2005/12/21/json-d

  • 我有一个静态网站托管在AWS CloudFront上。在一条路由上,我需要接受POST方法,因为它是OAuth服务器的重定向,所以我决定开发一个lambda@edge。 我的想法是在'Viewer Request'上注册lambda并截取POST方法,读取正文并复制标头上的值,以使它们在我的静态网站上可读(我知道我可以用javascript访问Referrer标头)。 我设置了Lambda,我可以

  • 对不起,如果这是一个愚蠢的问题,但我导入了一个字体存储在我的电脑到一个CSS文件,虽然它在Chrome工作,但它不在Microsoft Edge或Internet Explorer。我没有任何其他浏览器,所以我不能检查那些,我想知道是否有人会知道为什么。 当我进入sources时,这是显示的(还不让我嵌入图像,我很新):sources Linotte文件夹所在的文件夹与CSS工作表所在的文件夹在同