在 http 中输出一个 .mp4 文件,从数据库中提取到浏览器
Output in http a .mp4 file, issue pulling from database to browser
已回答
我很难使用 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
}
浏览器正在接收一些东西,但它只是格式错误或损坏。仅向视频播放器显示一条错误消息。任何帮助将不胜感激,我只编程了一周。
这是错误图片,没有控制台错误消息。
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 和 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
}
浏览器正在接收一些东西,但它只是格式错误或损坏。仅向视频播放器显示一条错误消息。任何帮助将不胜感激,我只编程了一周。
这是错误图片,没有控制台错误消息。
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 为单位)进行比较。