Tôi đang cố gắng để dòng ra một âm thanh/wav sử dụng tính năng HTML5 theo cách sau:Làm cách nào để phân phát tệp âm thanh để phát trực tuyến từ Grails bằng mã 206?
<audio type="audio/wav" src="/sound/10/audio/full" sound-id="10" version="full" controls="">
</audio>
Đây là hoạt động khá tốt trên Chrome, ngoại trừ việc nó không thể phát lại hoặc định vị lại thuộc tính currentTime:
var audioElement = $('audio').get(0)
audioElement.currentTime
> 1.2479820251464844
audioElement.currentTime = 0
audioElement.currentTime
> 1.2479820251464844
tôi đang phục vụ các tập tin âm thanh từ một bộ điều khiển Grails, sử dụng đoạn mã sau:
def audio() {
File file = soundService.getAudio(...)
response.setContentType('audio/wav')
response.setContentLength (file.bytes.length)
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")
response.outputStream << file.newInputStream() // Performing a binary stream copy
response.status = 206
return false
}
có vẻ như dù Grails i s trả lại phản hồi HTTP 200 thay vì 206 (Phần nội dung) như bạn có thể thấy từ kết quả sau từ Chrome:
Request URL:http://localhost:8080/sound/10/audio/full
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:identity;q=1, *;q=0
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Cookie:JSESSIONID=9395D8FFF34B7455F937190F521AA1BC
Host:localhost:8080
Range:bytes=0-3189
Referer:http://localhost:8080/cms/sound/10/edit
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Response Headersview source
Content-disposition:attachment;filename=full.wav
Content-Length:3190
Content-Type:audio/wav
Date:Wed, 19 Dec 2012 13:58:44 GMT
Server:Apache-Coyote/1.1
Bất kỳ ý tưởng nào có thể sai?
Xin cảm ơn, Amit.
ADDITION:
Thay đổi logic điều khiển để:
response.status = 206
response.setContentType(version.mime)
response.setContentLength (file.bytes.length)
response.setHeader("Content-disposition", "attachment;filename=${file.getName()}")
response.outputStream << file.newInputStream() // Performing a binary stream copy
Đã giúp đỡ trở về HTTP 206 (Partial-Content), tuy nhiên cả Chrome và Firefox sẽ không chơi các tập tin âm thanh (nhắc đến một lần nữa Chrome đã chơi khi nó đã nhận được tập tin với một 200 ...)
với các thông tin sau đây của phản ứng:
Request URL:http://localhost:8080/sound/10/audio/full
Request Headersview source
Accept-Encoding:identity;q=1, *;q=0
Range:bytes=0-
Referer:http://localhost:8080/cms/sound/10/edit
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
Có thể đặt 'response.status = 206' _before_ bạn truyền tệp? –
Điều này chắc chắn đã giúp nhận được mã 206 (tiêu đề bán phá giá với curl). Nhưng sau đó, trình phát của