b***i 发帖数: 3043 | 1 我说的stream,就是把链接放入浏览器,就立即开始播放,一边播放,一边下载。
如果我用godaddy的服务器,放入一个静态文件,是可以这样的。
下面是我放入google app engine的servlet, 和一般servlet略为不同就是input/
outputstream有些不同,但原则都一样,结果是浏览器等待文件下载完毕后才打开,请
问为什么?如何改进?谢谢
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException ,IOException {
res.setContentType("audio/mpeg3");
OutputStream os = res.getOutputStream();
res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
";");
res.setContentLength(1000000);
FileService fileService = FileServiceFactory.getFileService();
boolean lockForRead = false;
String filename = "/gs/" + BUCKETNAME + "/" + FILENAME;
AppEngineFile readableFile = new AppEngineFile(filename);
try{
FileReadChannel readChannel = fileService.openReadChannel(readableFile
, lockForRead);
InputStream is = Channels.newInputStream(readChannel);
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
try {
do {
int byteCount = is.read(buffer);
if (byteCount == -1)
break;
os.write(buffer, 0, byteCount);
os.flush();
} while (true);
} catch (Exception excp) {
} finally {
os.close();
is.close();
}
readChannel.close();
} catch(Exception e){
}
} | b***i 发帖数: 3043 | 2 补充一点,正确的response是
HTTP/1.1 200 OK
Date: Mon, 27 Feb 2012 04:25:54 GMT
Server: Apache
Last-Modified: Sun, 27 Nov 2011 05:05:40 GMT
ETag: "1530c7-1a1ac3-442b0566f0745"
Accept-Ranges: bytes
Content-Length: 1055427
Cache-Control: max-age=1209600
Expires: Mon, 12 Mar 2012 04:25:54 GMT
Content-Type: audio/mpeg
我是否要加上 setHeader来设定这些?到底是什么使得原来的goDaddy上面的http://xxx.com/a.mp3可以立即播放,而我的通过servlet的要下载后?我把 res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
删掉也不行。
mp3
【在 b***i 的大作中提到】 : 我说的stream,就是把链接放入浏览器,就立即开始播放,一边播放,一边下载。 : 如果我用godaddy的服务器,放入一个静态文件,是可以这样的。 : 下面是我放入google app engine的servlet, 和一般servlet略为不同就是input/ : outputstream有些不同,但原则都一样,结果是浏览器等待文件下载完毕后才打开,请 : 问为什么?如何改进?谢谢 : public void doGet(HttpServletRequest req, HttpServletResponse res) throws : ServletException ,IOException { : res.setContentType("audio/mpeg3"); : OutputStream os = res.getOutputStream(); : res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
| b***i 发帖数: 3043 | 3 我说的stream,就是把链接放入浏览器,就立即开始播放,一边播放,一边下载。
如果我用godaddy的服务器,放入一个静态文件,是可以这样的。
下面是我放入google app engine的servlet, 和一般servlet略为不同就是input/
outputstream有些不同,但原则都一样,结果是浏览器等待文件下载完毕后才打开,请
问为什么?如何改进?谢谢
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException ,IOException {
res.setContentType("audio/mpeg3");
OutputStream os = res.getOutputStream();
res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
";");
res.setContentLength(1000000);
FileService fileService = FileServiceFactory.getFileService();
boolean lockForRead = false;
String filename = "/gs/" + BUCKETNAME + "/" + FILENAME;
AppEngineFile readableFile = new AppEngineFile(filename);
try{
FileReadChannel readChannel = fileService.openReadChannel(readableFile
, lockForRead);
InputStream is = Channels.newInputStream(readChannel);
int BUFF_SIZE = 1024;
byte[] buffer = new byte[BUFF_SIZE];
try {
do {
int byteCount = is.read(buffer);
if (byteCount == -1)
break;
os.write(buffer, 0, byteCount);
os.flush();
} while (true);
} catch (Exception excp) {
} finally {
os.close();
is.close();
}
readChannel.close();
} catch(Exception e){
}
} | b***i 发帖数: 3043 | 4 补充一点,正确的response是
HTTP/1.1 200 OK
Date: Mon, 27 Feb 2012 04:25:54 GMT
Server: Apache
Last-Modified: Sun, 27 Nov 2011 05:05:40 GMT
ETag: "1530c7-1a1ac3-442b0566f0745"
Accept-Ranges: bytes
Content-Length: 1055427
Cache-Control: max-age=1209600
Expires: Mon, 12 Mar 2012 04:25:54 GMT
Content-Type: audio/mpeg
我是否要加上 setHeader来设定这些?到底是什么使得原来的goDaddy上面的http://xxx.com/a.mp3可以立即播放,而我的通过servlet的要下载后?我把 res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
删掉也不行。
mp3
【在 b***i 的大作中提到】 : 我说的stream,就是把链接放入浏览器,就立即开始播放,一边播放,一边下载。 : 如果我用godaddy的服务器,放入一个静态文件,是可以这样的。 : 下面是我放入google app engine的servlet, 和一般servlet略为不同就是input/ : outputstream有些不同,但原则都一样,结果是浏览器等待文件下载完毕后才打开,请 : 问为什么?如何改进?谢谢 : public void doGet(HttpServletRequest req, HttpServletResponse res) throws : ServletException ,IOException { : res.setContentType("audio/mpeg3"); : OutputStream os = res.getOutputStream(); : res.setHeader("Content-Disposition", "attachment; filename="" + "a.mp3
| m*****k 发帖数: 731 | 5 chunk?
App server setting?
This post seems to have something:
http://stackoverflow.com/questions/685271/using-servletoutputst |
|