我正在按照《Rust书籍》中的多线程Web服务器示例(https://doc.rust-lang.org/book/ch20-00-final-project-a-web-server.html)进行操作。
发送文本文件(html)可以正常工作。但尝试发送二进制(mp3)文件会在浏览器上出现错误。
为了发送MP3文件,我正在尝试使用以下代码片段。我认为问题在于将内容转换为字符串。我尝试改变头部,尝试其他类型的Content-Type,但仍然无法解决问题。
发送文本文件(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();
结果是浏览器无法播放该文件。事实上,如果我设法下载发送的文件,它也会出现损坏。
我应该如何对文件进行编码以便将其发送到浏览器?