gpt4 book ai didi

mongodb - 在 http 中输出一个 .mp4 文件,从数据库中提取到浏览器

转载 作者:数据小太阳 更新时间:2023-10-29 03:12:24 25 4
gpt4 key购买 nike

已回答

我在使用 Mongodb 和 Gridfs 时遇到了困难,将其与 Go 的 http 包一起使用。我正在尝试将一个 .mp4 文件存储到 Gridfs 中,然后将其拉出到浏览器中进行播放。

Heres what I am doing now. It successfully pulls the file from database, I could even write it correctly to a download location.

// Connect to database
// Session to database

func movie(w http.ResponseWriter r *http.Request) {
file, err := db.GridFS("fs").Open("movie.mp4")
if err != nil {
log.Println(err)
}
defer file.Close()

w.Header.Set("Content-type", "video/mp4")
if _, err := io.Copy(w, file); err != nil {
log.Println(err)
}
// I am trying to send it to the browser.
// I want to achieve same thing as, http://localhost/view/movie.mp4,
as if you did that.
}

如果文件在服务器上,我会做这样的事情。但是我试图将它存储在 Mongodb 中,以便更轻松地使用元数据。

func movie(w http.ResponseWriter r *http.Request) {
http.ServeFile("./uploads/movie.mp4") // Easy
}

浏览器正在接收一些东西,但它只是格式错误或损坏。仅向视频播放器显示一条错误消息。任何帮助将不胜感激,我只编程了一周。

这是错误的图片,没有控制台错误消息。

enter image description here

Unless someone has an alternative to storing video files for playback in browser somewhere other than MongoDB or Amazon S3. Please let me know, thanks.

最佳答案

您可能需要检查 http.ServeContent。它将自动处理所有困惑(内容类型、内容长度、部分数据、缓存)并为您节省大量时间。它需要一个 ReadSeeker 来服务,GridFile 已经实现了。因此,您的代码可能会简单地更改为以下内容。

func movie(w http.ResponseWriter r *http.Request) {
file, err := db.GridFS("fs").Open("movie.mp4")
if err != nil {
log.Println(err)
}
defer file.Close()

http.ServeContent(w,r,"movie.mp4",file.UploadDate(),file)

}

如果这不起作用,请使用 curl 或 wget 等工具下载服务内容并将其与原始内容(以 db 为单位)进行比较。

关于mongodb - 在 http 中输出一个 .mp4 文件,从数据库中提取到浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47975428/

25 4 0
文章推荐: Golang GRPC 返回 EOF 错误
文章推荐: javascript - 未捕获的类型错误 : Object # has no method 'movingBoxes'