我正在跟踪Rust本书(https://doc.rust-lang.org/book/ch20-00-final-project-a-web-server.html)中的多线程Web服务器示例。
发送文本文件(html)效果很好。购买尝试发送二进制(mp3)文件会在浏览器上显示错误。
要发送MP3文件,我正在尝试以下代码。我认为问题出在将内容转换为字符串。我试过更改标题,尝试另一种Content-Type似乎没有任何用。
let sent_bytes = contents.len();
let contents = &String::from_utf8_lossy(&contents[..]);
let response = format!("HTTP/1.0 200 OK\r\nContent-Type: audio/mpeg\r\nContent-Length: {}\r\n\r\n{}",
sent_bytes,
contents
);
writer.write_all(response.as_bytes()).unwrap();
eprintln!("sent {}bytes\n", sent_bytes);
writer.flush().unwrap();
Run Code Online (Sandbox Code Playgroud)
结果是浏览器无法重现该文件。实际上,如果我设法下载发送的文件,则它已损坏。
我应该如何编码文件以将其发送到浏览器?