- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在探索 Iron web framework for Rust并创建了一个小型处理程序,它将读取从请求 URL 派生的图像,调整其大小,然后传递结果。据我所知 Iron Response可以从几种不同的类型构建,包括实现 Read trait 的类型.
save function在image crate采用实现 Write trait 的类型.
感觉这两个函数应该能够连接起来,这样写者就可以写入一个缓冲区,而读者可以从中读取。我找到了 pipe crate ,它似乎实现了这种行为,但我无法将管道的 Read
端转换为 Iron 将接受的内容。
我的函数的一个稍微简化的版本:
fn artwork(req: &mut Request) -> IronResult<Response> {
let mut filepath = PathBuf::from("artwork/sample.png");
let img = match image::open(&filepath) {
Ok(img) => img,
Err(e) => return Err(IronError::new(e, status::InternalServerError))
};
let (mut read, mut write) = pipe::pipe();
thread::spawn(move || {
let thumb = img.resize(128, 128, image::FilterType::Triangle);
thumb.save(&mut write, image::JPEG).unwrap();
});
let mut res = Response::new();
res.status = Some(iron::status::Ok);
res.body = Some(Box::new(read));
Ok(res)
}
我收到的错误:
src/main.rs:70:21: 70:35 error: the trait `iron::response::WriteBody` is not implemented for the type `pipe::PipeReader` [E0277]
src/main.rs:70 res.body = Some(Box::new(read));
^~~~~~~~~~~~~~
PipeReader实现 Read
和 WriteBody是为 Read
实现的,所以我觉得这应该可行。我也试过:
let reader: Box<Read> = Box::new(read);
let mut res = Response::new();
res.status = Some(iron::status::Ok);
res.body = Some(reader);
但这给出了错误:
src/main.rs:72:21: 72:27 error: mismatched types:
expected `Box<iron::response::WriteBody + Send>`,
found `Box<std::io::Read>`
(expected trait `iron::response::WriteBody`,
found trait `std::io::Read`) [E0308]
src/main.rs:72 res.body = Some(reader);
^~~~~~
如何将 save
函数连接到 Iron 响应主体?
最佳答案
您不能使用 impl
对于 Box<Read>
在这里,因为 Rust 不能保证它实现了 Send
.如果你有一个 Box<Read + Send>
,但事实就是如此。不幸的是,虽然 Box<Read>
工具 WriteBody
, Box<Read + Send>
没有,所以你不能使用这种类型。
查看 WriteBody
的源代码及其实现,有a commented out implementation这将实现 WriteBody
对于所有实现 Read
的类型, 但它现在还不能编译(正如评论所说,这需要专门化,希望很快就会出现在该语言中)。
您可以向 Iron 提交拉取请求以添加 impl
对于 WriteBody
在 Box<Read + Send>
;然后,您可以使用该类型 ( demo )。另一种选择是为 PipeReader
定义一个包装结构。并实现 WriteBody
你自己(可能基于 the implementation for Box<Read>
)。
关于pipe - 将采用 Write 的函数连接到采用 Read 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32676277/
我正在执行 UPDATE .WRITE() 语句,并发现它显然只有在您像这样定义它时才有效: string sql = "UPDATE [dbo].[Table] SET [Column].WRITE
我在 Unix 系统上用 C 编程。我知道: write(fd,"ABCD",4); 比这样做更好: write(fd, "A", 1); write(fd, "B", 1); write(fd, "
func hash(s string) uint32 { h := fnv.New32a() h.Write([]byte(s)) return h.Sum32() } 对于这
在经典的 asp 页面中,有人告诉我您可以使用 vbscript 或 jscript。而 jscript 就是 javascript。 所以我不确定 Response.Write、Response.W
当 openssl 子进程尝试 write() 到本地目录时,我收到此错误。在调用 write() 之前连接已关闭。它没有与 ssl 连接,因为我什至无法从 nodejs 文档启动示例代码。 我错过了
最近我在试验netty。我遇到了以下问题: ctx.channel().write(new TextWebSocketFrame("hello")) 没有在客户端返回 hello,但是 ctx.cha
请解释以下内容: def feed(data): import os print "DATA LEN: %s" % len(data) f = open("copy", "w") f.
有什么区别debug.write 和 Trace.write ?每个应该什么时候使用? 最佳答案 在典型的发布构建配置中,Debug class 被禁用并且什么都不做。 Trace但是,仍然可以在发行
我只是想知道,就性能而言,哪个更好(我在 FileStream 中使用 StreamWriter): 多次调用 Stream.Write(): StreamWriter sw = new Stream
我发现自己写给 stringwriter,然后在函数末尾执行 resp.Write(sw.ToString())。这是不必要的吗?如果我多次使用 HttpResponse.Write,即使我的页面是
我正在尝试通过 JavaScript 文件从 electron 打开一个新窗口,它可以工作,并打开了新窗口,但我无法将 HTML/文本写入新文件。我收到那个错误: Cannot read proper
我们对 QIODevice::write 的一般行为和具体的 QTcpSocket 实现感到非常困惑。有一个 similar question已经,但答案并不令人满意。主要的混淆源于分别提到的 byt
我知道这听起来像是一个愚蠢的问题: write(*,*) 和 write(6,*) ?我在我研究所的 super 计算机上运行一个复杂的代码,它通过一个不同于 6 的单元号输出一个数据文件,显然编译的
我有一个结构体,它可以通过一系列复杂的方法调用转换为文本,其中包含大量 write!调用。此文本可以写入文件或调试日志。我正在决定是否使用 fmt::Write 或 io::Write .我不能真正使
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
In the C standard library, an output can't be followed by an input and vice versa. 对于Linux API,可以在re
我希望能够为一件事做 document.write。然后延迟半秒,然后再记录。写一些。你知道这是否可能吗?而且,如果是这样,怎么办?到目前为止,我已经尝试过了,但没有奏效: document.writ
为什么通过 onclick 属性调用的 write() 函数解析为 document.write() 并替换文档?有什么办法可以阻止这种情况发生吗? Write Function Alternat
我想创建一个包含多个“页面”的文本文件,并将每个页面的字节偏移量记录在一个单独的文件中。为此,我将字符串打印到主输出文件并使用 bytes_written += file.write(str) 计算字
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我是一名优秀的程序员,十分优秀!