模拟飞行2004pmdg高手请进,PMDG74...

高手请进! - ITeye问答
现在语音文件不在Tomcat的webapps下。我想通过WEB访问语音文件。得怎么实现。
注:之前用的方法是讲语音文件写到webapps,结果被老板否决了。因为如果语音文件占有的空间大。速度会很慢。怎样才能通过WEB直接访问我指定的语音文件呢?高手来帮下忙。小弟感激不尽。
我一共就30分。都给你们了。
问题补充:xiaolongfeixiang 写道放在数据库中?
不是& 现在语音文件在某个盘符下。& 数据库存的是语音文件的路径。
我怎么通过WEB访问语音文件呢。因为语音文件不在webapps下
问题补充:数据库存的路径是 语音文件的路径。我怎样通过WEB访问它呢
问题补充:可能我没没有说清楚,不好意思。
比如现在有个语音文件的路径../recordfile//1.wav,
数据库存放的就是这个地址。我写的是一个BS系统,目的是点击播放的时候,让1.wav播放。一直在提示我找不到文件。
语音文件的路径是不能改的。是另一个系统存的。
我得怎么才能播放这个语音文件呢?
听说tomcat有个文件映射,小弟不太懂,没弄明白,那位高手能指点下。急啊。
问题补充:2022228 写道数据库存的是语音文件的路径
这个是什么路径?本地文件的绝对路径?
比如1.wav的在数据库的filepath里存的路径就是这个
../recordfile//1.wav,
问题补充:2022228 写道语言文件需要下载到web的客户端吗?(ie)
我现在写的系统有下载的功能,现在的问题是我点击播放的时候找不到语音文件。
语音文件的路径是../recordfile/& 类似这种的。
问题补充:jiangnan2112 写道我曾经也经历过这样的问题,不过当时公司说让我通过公司自己的文件服务器来读,可是当时我的项目没有用到文件服务器,后来采取的办法是通过I/O流输出去的,你可以考虑下可不可以。
我之前做的就是将语音文件用文件读写功能,COPY到webapps下。之后再访问。但是老板说不行。如果语音文件200M,速度会很慢的。
问题补充:ouchxp 写道服务器上写个Action.
请求这个Action的时候.
Action读取文件,
以流的方式写出给用户
就是file read -& response write
就是经过服务器程序中转一下 不就好了?
我们的报表就有这么做的啊
你说的用流的方式 效率高么?如果很多人访问。或者语音文件很大。速度会快么?
问题补充:谢谢大哥们的回答。我在仔细说下这个系统。
现在有一台服务器。主要的功能是负责录音。相应的语音文件存放在这台机器了。我写的是一个B/S系统。目的是在自己本地机器上可以对服务器的存的语音文件 进行播放。
服务器上的数据库有一个录音记录表。其中存放语音文件是用的路径形式存放的。
比如某个语音文件的路径是../recordfile//1.wav
我怎样才能用本地的机器播放1.wav这个文件呢?
各位大侠请指点。
配置信息:
A:存放影音文件主机
/path/a:存放影音文件目录;
B:应用服务系统主机
/path/app:应用目录一般是$tomcat_home/webapps/appname
步骤
1.在主机A上启动NFS服务,并编辑/etc/exports文件,给B主机赋访问权限;
2.在主机B上终端执行#mount -t nfs -o rw [主机A的IP]:/path/a /path/app/[影音文件访问目录];
3.这样你就可以在B的应用系统中直接访问影音,用户也可以直接下载影音文件;
性能优化:
如果NFS的网络IO制约了应用系统的性能,可以考虑使用memcached或者Mongodb来存储影音文件数据,不过按你的需求基本用不到。
NFS服务的***和配置,还有mount命令的用法,这个GOOGLE大婶吧 ~~
系统设置环境变量,java可以读取环境变量的,你整个环境变量一切都ok了,移植到其他系统,只需要配置资源文件的路径的环境变量就一切ok了。。程序该怎么开发还怎么开发。文件要发送到客户端,还得通过io的方式加载到页面中
将语音文件下载到客户端这种办法是不可取的,
你可以将语音文件的路径保存到数据库,做一个页面,显示所有音频文件的路径。
你客户端请求这个jsp页面,应该就可以实现了。
不知是否问题已经解决?
本人还是比较赞同配置虚拟目录的实现方式!
数据库存放的是../XX/XX/XX.wav
如果你想找到相应的W***。比如说,你的语音文件专门存放在D盘某个文件夹。那么你获取
数据库语音文件路径的时候,在修改一下路径,比如,D:/XX/XX/XX.wav。这样不就行了
1: 在classes 下创建一个 xml 文件 ,例如:我的xml文件名称为:sysConfig.properties,此文件中的内容很简单,如下所示:
userDirectory.path=E:\\wav\\
2:在tomcat/conf/server.xml 文件中配置一下,如下所示:
&Host name="localhost"
appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"&
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"
&!-- SingleSignOn valve, share authentication between web applications
Documentation at: /docs/config/valve.html --&
&Valve className="org.apache.catalina.authenticator.SingleSignOn" /&
&!-- Access log processes all example.
Documentation at: /docs/config/valve.html --&
&Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/&
&Valve className="org.apache.catalina.valves.AccessLogValve" directory="E:\LogFiles"
prefix="access." suffix=".txt" pattern='%h %v %l %u %t \"%r\" % &s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Cookie}i\"'
fileDateFormat="yyyy-MM-dd"
resolveHosts="false" /&
&Context path="" docBase="demo" debug="0" reloadable="true" /&
&Context path="/recordfile" docBase="e:/wav" debug="0" reloadable="true" /&
注意:上面的 path --&为你所访问此文件时所带的前缀,docBase ---&为你工程文件所在的物理地址,如果工程文件已经存放在 tomcat/webapp 下,那么直接写工程文件名称就可,这是tomcat内置机制。
3:创建上传页面,如下所示:
&table width="0%" border="0" cellspacing="0" cellpadding="0"&
&input type="file" name="fileUpload" id="fileUpload" style="height:22width:285margin-left:5px" /&&/td&&/tr&
4: 上传文件代码【包括自动创建文件夹,此文件夹创建后会保存到tomcat下所配置的虚拟路径下。】
* 上传文件
* @param fileSrc
文件原始地址
* @param fileName
文件的名称
* @throws Exception
private String uploadWav(File fileSrc,String fileName) throws Exception {
// floderPath最终为:E:\wav\
String folderPath = ResourceBundle.getBundle("sysConfig").getString(
"userDirectory.path");
// filePath最终为:E:\wav\当前用户名
String filePath = UserFactory.getProfileRemote(directoryId)
.createUserFolderInOS(userName, folderPath);
//清除文件
FileUtils.cleanDirectory(new File(filePath));
// filePath最终为:E:\wav\当前用户名\gravatar\
filePath = filePath + File.separator + "resource" + File.
// extensionName最终为:wav
String extensionName = FilenameUtils.getExtension(fileName);
// newFileName最终为:23c32d8c-88e1-481a-b272-af.wav
String newFileName = userName + "." + extensionN
// newFilePath最终为:E:\wav\当前用户名\gravatar\23c32d8c-88e1-481a-b272-af.wav
String newFilePath = filePath + newFileN
OutputStream out =
InputStream in =
FileUtils.forceMkdir(new File(filePath));
out = new FileOutputStream(newFilePath);
in = new FileInputStream(fileSrc);
IOUtils.copy(in, out);
} finally {
if (out != null) {
out.flush();
IOUtils.closeQuietly(out);
IOUtils.closeQuietly(in);
} catch (IOException e) {
e.printStackTrace();
updateProfileInfo(newFileName);
return newFileN
5:读取文件代码
public String execute() throws Exception {
userName = WebUtil.getAccessUserName();
String path = ResourceBundle.getBundle("sysConfig").getString("userDirectory.path");
File file =
if (StringUtils.isNotBlank(userName)) {
file = new File(path + userName + File.separator + "gravatar"+File.separator);
if(file.isDirectory()){
//读取文件夹下相应的文件
Iterator&File& iterator = FileUtils.iterateFiles(file, null, false);
File imgFile = iterator.next();
if(imgFile.exists()){
if(imgFile.getPath().equals(file+File.separator+"Thumbs.db"))
getDefaultWav(file);
render(imgFile);
getDefaultWav(file);
getDefaultWav(file);
getDefaultWav(file);
* 获取默认头像
* @param file
private void getDefaultWav(File file){
String defaultWavPath = ServletActionContext.getServletContext().getRealPath("wav")+File.
String imgname = defaultGravatarPath+"resource"+File.separator+"defaultWav.wav";
file = new File(wavname);
render(file);
* 读取文件
* @param file
private void render(File file){
HttpServletResponse resp = ServletActionContext.getResponse();
resp.setHeader("Pragma","No-cache");
resp.setHeader("Cache-Control","no-cache");
resp.setDateHeader("Expires", 0);
resp.flushBuffer();
} catch (IOException e1) {
e1.printStackTrace();
OutputStream os =
InputStream is =
if (file.exists()) {
is = new FileInputStream(file);
resp.setContentType("image/*"); //此处设置你设置的音频格式
os = resp.getOutputStream();
IOUtils.copy(is, os);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
if (os != null) {
os.flush();
IOUtils.closeQuietly(os);
} catch (IOException e) {
e.printStackTrace();
6:Struts.xml配置文件
&!-- 上传文件 --&
&action name="UploadWav" class="net.xx.wav.action.UploadWavAction" method="UploadWav"&
&!-- 获取文件物理地址 --&
&action name="previewWav" class="net.xx.xx.xx.previewWav"&&/action&
7: 上传成功后:在浏览器访问: http://localhost:8080/工程名/wav/用户名/resource/abcde.wav
不知道你的问题解决了没有,我感觉一下两种方法都可以搞定的,可以参考一下:
1:如果是linux系统,并且你的tomcat和音频文件在同一台机器上,可以在你的.../webapps/project/下面建立软连接,这样即能在应用中正常访问,也不会占用你的tomcat的资源了。
2:如果资源允许的情况下,可以建立一个文件服务器,将你的音频文件、图片、视频文件....静态资源都放在文件服务器上。
估计存在某个目录中,直接访问就行吧
这种问题之前工作的时候遇到很多种 而且文件都是上G的
我当初的解决方法好几种
抽取常用的说下
1、通过流媒体服务器把资源推出去(建流媒体时和数据库相对路径统一),在播放页面路径本机不用改 如果是别的服务器推过来的数据 需要切换IP& 这个一个配置文件可以解决 且速度快支持快进快退 (MediaService \helix Server)
2、通过tomcate配置 把资源当作一个项目发布 页面可能需修加个项目发布的上下文,资源访问慢
详细的配置忘了 好几年没有做资源点播这方面的了 如果有问题回家后有详细备份联系我
在录音文件服务器上建一个web应用,web应用根目录为录音文件存放目录,我之前的公司就是这么干的。
网上COPY的代码。
&!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
&&&&&&&&&&&&&&&&&&&&& "http://www.w3.org/TR/html4/loose.dtd"&
&html&
&head&
&meta http-equiv="Content-Language" content="en-us"&
&meta http-equiv="Content-Type" content="text/ charset=windows-1252"&
&title&Music Test&/title&
&script language="javascript"&
function playMusic(nm) {
&&& obj = document.embeds[nm];
&&& if(obj.Play) obj.Play();
&&&
}
function stopMusic(nm) {
&&& obj = document.embeds[nm];
&&& if(obj.Stop) obj.Stop();
&&&
}
function rewMusic(nm) {
&&& obj = document.embeds[nm];
&&& if(obj.Rewind) obj.Rewind();
&&&
}
&/script&
&/head&
&body&
&button type="button" onclick="return playMusic('myMusic');"&Play Music&/button&
&button type="button" onclick="return stopMusic('myMusic');"&Stop Music&/button&
&button type="button" onclick="return rewMusic('myMusic');"&Rewind Music&/button&
&embed name="myMusic" src="../recordfile//1.wav" type="audio/wav"
autostart="false" hidden="" loop="true" mastersound width="128" height="128"&&/embed&
&/body&
&/html&
静态文件下载的访问自然是要交个apache,lighttp了,你在程序里读写放在哪都可以,控制好权限就行了
ogoodnight
支持这种方式
我做过类似的虚拟目录,出来的是图片文件
在tomcat的conf\Catalina\localhost目录下建立xml文件
注意文件名和dispalyName属性值一致
xml内容:
&Context displayName="wavfile" docBase="具体目录" path="/wavfile" reloadable="true"&&&
&/Context&
displayName="同xml文件名"
docBase属性指定你存放音频文件的目录
在你项目下面加一个media这样的目录, 然后在tomcat配置一个虚拟目录,
&Context& docBase="D:/wav文件存文路径" path="/你的项目名称/media" reloadable="true"&&&&&
&/Context&
这样就可以不用拷贝了, 我们公司就用这样弄的。& 加分吧。 兄弟。
我猜LZ想要的仅仅是一个html标签?
&embed src="G:\amusement\music\蔡琴\外婆的澎湖湾.mp3" align="top" &
或者为了安全,把原来的文件复制一份作为web服务用,添加文件的时候,往2个文件夹都添加。
不管是apache还是tomcat,都可以指定web应用的虚拟目录的
&Host name=""& appBase=""
&&&&&&&&&&& unpackWARs="true" autoDeploy="true"
&&&&&&&&&&& xmlValidation="false" xmlNamespaceAware="false"&
&Context path="" docBase="D:\soft\Tomcat6.0\webapps\cn" reloadable="false" privileged="true"&&/Context&
把appBase设置为空,context里面指定本地文件的真实路径。
如果存放语音文件的机器和web应用不是同一个机器,要想通过web访问,只能在语音文件的机器上提供web服务,装一个apache,指定虚拟目录,配置目录的访问权限(只读)
引用如果用户访问web应用能直接下载非webapp下的文件,那不乱套了???
web应用的文件只能放到webapp目录下?
你是什么服务器?如果是tomcat的话,可以前面放个apache,让apache去请求这个语音文件,你可以试一下
或者在service.xml配置一&context doBase=""/&大致这个意思,这种部署方式,我觉得可以直接访问到的
你是什么服务器?如果是tomcat的话,可以前面放个apache,让apache去请求这个语音文件,你可以试一下
或者在service.xml配置一&context doBase=""/&大致这个意思,这种部署方式,我觉得可以直接访问到的
如果这个应用访问量较大的话,可以新建一个应用,专门用来放语音文件,这样就可以用HTTP访问了
引用ftp服务器是干啥用的?传输的不是流吗?
你请求一个html文件,你认为服务器传输的是什么?
我晕了.
要是能用FTP.楼主还会问这个问题么?
直接请求方式.不也说了不能放到webapp目录下.
除了配置文件映射如何能直接下载?
引用至于权限问题,可通过配置解决
麻烦给个配置.如何用URL直接下载系统文件?
如果用户访问web应用能直接下载非webapp下的文件,那不乱套了???
引用二:建立专门的servlet,读取文件流,再转发给页面。
&& 这种方式更自由,可以读取存放到文件或数据库等只要能以流方式读取的资源,甚至还可以对其进行处理,不过,这些要内存。
&& 可以肯定的是,这种方式的效率比不上前者的,除了读取更自由外,在速度等各个方面都没有优势。
因为语音文件属于静态文件,对它的请求是由容器以流的形式直接处理,并不会花费太大的内存。
这个多一步调用。首先到容器,容器再调用你的servlet....
至于权限问题,可通过配置解决
引用你说服务器自己写流是什么方式? 请教了.
除了文件映射之类的方式之外,应该就只能用流来写出了. 就如 蔡华江 所说的一样.
流方式的好处就是对服务器内存资源占用不大,读出一点写出一点.
而且可以控制写出速度.避免多用户使用时占用带宽过多.
至于效率和速度来说,还是没有静态方式的高. 但好处是自由可控.
ftp服务器是干啥用的?传输的不是流吗?
你请求一个html文件,你认为服务器传输的是什么?
可以用流媒体服务器或者将流媒体文件放到apache下去访问。
就以io方式读取吧,灵活安全。如果你没有做相应的权限控制,直接放在webapps下面不安全。
引用你自己写流和服务器帮你写,谁的效率高?
你说服务器自己写流是什么方式? 请教了.
除了文件映射之类的方式之外,应该就只能用流来写出了. 就如 蔡华江 所说的一样.
流方式的好处就是对服务器内存资源占用不大,读出一点写出一点.
而且可以控制写出速度.避免多用户使用时占用带宽过多.
至于效率和速度来说,还是没有静态方式的高. 但好处是自由可控.
引用服务器上写个Action.
请求这个Action的时候.
Action读取文件,
以流的方式写出给用户
就是file read -& response write
就是经过服务器程序中转一下 不就好了?
我们的报表就有这么做的啊
你自己写流和服务器帮你写,谁的效率高?
引用因为如果语音文件占有的空间大。速度会很慢
我想这是没有依据的,因为通过静态方式来访问资源的话,效率总是够快的(再快就是缓存了)
如果你希望直接访问一个资源,那么有两种途径:
一:通过静态方式,这个方式由容器来处理请求。
&& 你可以将文件放在webapp下,也可以放在系统中任意一个地方,再配置
&Context displayName="wavfile" docBase="D:/wav文件存文路径" path="/wavfile" reloadable="true"&&&&
&/Context&
&& 这两种方式效果都是一样的。
&&
&& 再者,就专门放到静态文件服务器中去,如apache之类的,这些原理都一样。但有专门的静态服务器,会减轻应用程序服务器的压力。
二:建立专门的servlet,读取文件流,再转发给页面。
&& 这种方式更自由,可以读取存放到文件或数据库等只要能以流方式读取的资源,甚至还可以对其进行处理,不过,这些要内存。
&& 可以肯定的是,这种方式的效率比不上前者的,除了读取更自由外,在速度等各个方面都没有优势。
因为语音文件属于静态文件,对它的请求是由容器以流的形式直接处理,并不会花费太大的内存。
配置虚拟路径吧,要不就通过IO流进行写入,最后一种方案就是对于语音文件放在其他服务器上,而本地数据库存放语音文件的全路径!这样就是浪费了一台服务器,不过速度很快!你去看看很多大网站都是这么做的!
为什么要copy到webapp下,直接输出到客户端不行吗?
服务器上写个Action.
请求这个Action的时候.
Action读取文件,
以流的方式写出给用户
就是file read -& response write
就是经过服务器程序中转一下 不就好了?
我们的报表就有这么做的啊
在tomcat下配一个虚拟目录,
建一个wavfile.xml 放入tomcat的localhost目录中(tomcat目录根据实际***位置变更。)
D:\Tomcat 5.5\conf\Catalina\localhost
wavfile.xml的内容如下
&?xml version='1.0' encoding='utf-8'?&
&Context displayName="wavfile" docBase="D:/wav文件存文路径" path="/wavfile" reloadable="true"&&&&&
&/Context&
文件访问方式:http://localhost:8080/wavfile/具体的文件名。
以上,希望有帮助
如果只是让客户端可以访问并下载这个语音文件,可以把语音文件的总目录配置成一个web项目(静态的,不语音编程支持,web服务器可以帮你做传输,类似于html文件的访问)
服务器上写个Action.
请求这个Action的时候.
Action读取文件,
以流的方式写出给用户
就是file read -& response write
用一个Servlet, 将语音文件所在的目录的绝对路径作为Servlet的初始化参数配置到web.xml中,然后当访问Servlet的时候,带一个相对路径的参数,如:http://localhost/yourapp/video?p=a%2Fb.mp3, Servlet通过配置的路径与相对参数p组合成一个绝对路径, 假设配置的路径为d:/data, 那么路径拼起来就是d:/data/a/b.mp3, 这样就可以访问你的语音文件了.
通过绝对路径应该可以的
我曾经也经历过这样的问题,不过当时公司说让我通过公司自己的文件服务器来读,可是当时我的项目没有用到文件服务器,后来采取的办法是通过I/O流输出去的,你可以考虑下可不可以。
还是说只允许服务器访问本地的文件系统
语言文件需要下载到web的客户端吗?(ie)
数据库存的是语音文件的路径
这个是什么路径?本地文件的绝对路径?
绝对路径是可以的访问的
引用数据库存的路径是 语音文件的路径。我怎样通过WEB访问它呢
通过绝对路径
放在数据库中?
已解决问题
未解决问题2000年9月 VB大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

参考资料

 

随机推荐