ответил
Мне трудно работать с Mongodb и Gridfs, используя его с http-пакетом Go. Я пытаюсь сохранить файл .mp4 в Gridfs, а затем извлечь его в браузер для воспроизведения.
Вот что я делаю сейчас. Он успешно извлекает файл из базы данных, я даже мог правильно записать его в место загрузки.
// 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
}
Браузер что-то получает, но оно просто искажено или повреждено. Просто показывает видеоплеер с сообщением об ошибке. Буду признателен за любую помощь, я программирую всего неделю.
Вот изображение ошибки, сообщений об ошибках консоли нет.
Если только у кого-то нет альтернативы хранению видеофайлов для воспроизведения в браузере где-то кроме MongoDB или Amazon S3. Пожалуйста дайте мне знать, спасибо.
io.Copy(w, r)
опечатка, верно? На самом деле вы не пытаетесь написать запрос в ответ, аfile
, верно? - person mkopriva   schedule 26.12.2017io.Copy
. - person mkopriva   schedule 26.12.2017if _, err := io.Copy(w, file); err != nil { // handle error
- person mkopriva   schedule 26.12.2017r
— это не файл,r
— это запрос, который вы получили от клиента, копировать его вw
не имеет особого смысла. - person mkopriva   schedule 26.12.2017