上传文件及将大数据写入数据库并通过页面访问Word文档下载推荐.docx
《上传文件及将大数据写入数据库并通过页面访问Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《上传文件及将大数据写入数据库并通过页面访问Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
photo"
作者名:
composer"
歌曲:
song"
歌曲描述:
memo"
submit"
value="
上载"
/form>
/body>
/html>
通过浏览器传输时,所传输的数据的格式为:
-----------------------------7d8b07a02ce
Content-Disposition:
form-data;
站三
;
filename="
E:
\Temp\file1.txt"
Content-Type:
text/plain
AAAAAAAAAAAAAA
李四
\Temp\file2.txt"
BBBBBBBBBBBBBB
好感
-----------------------------7d8b07a02ce--
浏览器会以特定的“节”标记来分割每一个数据区,本例的特定分割符为“-----------------------------7d8b07a02ce”。
并且对传输的任何数据,浏览器均会以“回车换行”符结束。
基于此,我们可以用如下的Servlet程序获取以上表单数据:
packagecom.ttt.chapter8;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
importjavax.servlet.ServletInputStream;
importjava.sql.*;
/**
*ServletimplementationclassforServlet:
UpLoad
*
*/
publicclassUpLoadextendsjavax.servlet.http.HttpServletimplementsjavax.servlet.Servlet{
/**
*
privatestaticfinallongserialVersionUID=1L;
Stringsinger;
Stringcomposer;
Stringsong;
byte[]buff=newbyte[1024];
StringsectionDelimeter;
/*(non-Java-doc)
*@seejavax.servlet.http.HttpServlet#HttpServlet()
publicUpLoad(){
super();
}
*@seejavax.servlet.http.HttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//TODOAuto-generatedmethodstub
*@seejavax.servlet.http.HttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
intcount;
ServletInputStreamsis=request.getInputStream();
//skipthebeginning3lines,thengetthe4thlinewhichissinger
//注意:
用sis.readLine(buff,0,buff.length)读入的内容包含结尾的“回车换行”符
count=sis.readLine(buff,0,buff.length);
sectionDelimeter=newString(buff,0,count-2);
singer=newString(buff,0,count-2);
System.out.println("
Singer="
+singer);
//skipthebeginning4lines,thengetthesingerphotoimagestream
intrc1;
ByteArrayOutputStreamphoto=newByteArrayOutputStream();
while(true)
{
rc1=sis.readLine(buff,0,buff.length);
if(rc1==buff.length)
{
photo.write(buff,0,rc1);
}
else
Stringdel=newString(buff,0,rc1);
if(del.indexOf(sectionDelimeter)!
=-1)
break;
else
{
photo.write(buff,0,rc1);
}
}
Photosize="
+photo.size());
/*
FileOutputStreamfos=newFileOutputStream("
\\Temp\\ABC.jpg"
);
Size="
+photo.size());
fos.write(photo.toByteArray());
fos.flush();
fos.close();
*/
//getcomposer
//因为我们在前一个对图像媒体的读取中,已经读出了域分隔符,所以,此处只要读两个。
sis.readLine(buff,0,buff.length);
composer=newString(buff,0,count-2);
Composer="
+composer);
//getthesongmedia
Stringss;
ss=newString(buff,0,count-2);
StringsongName=ss.substring(ss.lastIndexOf("
\\"
)+1,ss.length()-1);
intrc2;
ByteArrayOutputStreamsong=newByteArrayOutputStream();
rc2=sis.readLine(buff,0,buff.length);
if(rc2==buff.length)
song.write(buff,0,rc2);
Stringdel=newString(buff,0,rc2);
song.write(buff,0,rc2);
SongName="
+songName+"
Size="
+song.size());
\\Temp\\ABC.mp3"
+song.size());
fos.write(song.toByteArray());
//getthesongmemo
Stringmemo=newString(buff,0,count-2);
Memo="
+memo);
//insertthemediaintotable
intrest=0;
rest=insertIntoDatabase(singer,photo,composer,song,memo,songName);
response.setContentType("
text/html"
PrintWriterpw=response.getWriter();
if(rest>
0)
pw.println("
Success"
else
Failed"
}
privateintinsertIntoDatabase(Stringsinger,ByteArrayOutputStreamphoto,Stringcomposer,ByteArrayOutputStreamsong,Stringmemo,StringsongName)
{
Connectionconn=null;
intca=0;
PreparedStatementpst=null;
StringconnectionUrl="
jdbc:
sqlserver:
//192.168.10.80:
1433;
"
+
"
databaseName=Student;
user=sa;
password=12345"
try
Class.forName("
com.microsoft.sqlserver.jdbc.SQLServerDriver"
conn=DriverManager.getConnection(connectionUrl);
pst=conn.prepareStatement("
insertintoSong(song_singer_name,song_singer_photo,song_composer,song_singer_song,song_memo,song_name)values(?
?
)"
pst.setString(1,singer);
pst.setBytes(2,photo.toByteArray());
pst.setString(3,composer);
pst.setBytes(4,song.toByteArray());
pst.setString(5,memo);
pst.setString(6,songName);
ca=pst.executeUpdate();
catch(Exceptione)
e.printStackTrace();
finally
try
pst.close();
conn.close();
catch(Exceptione1){};
returnca;
}
}
现在已经将音乐数据存入了数据库,可以通过如下的页面和Servlet来播放:
播放页面:
!
DOCTYPEhtmlPUBLIC"
-//W3C//DTDXHTML1.0Transitional//EN"
"
http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
htmlxmlns="
//www.w3.org/1999/xhtml"
metahttp-equiv="
Content-Type"
content="
charset=gb2312"
媒体播放测试<
--使用Microsoftmediaplayer播放媒体,可以播放MP3、MPEG等-->
--
p>
objectid="
MediaPlayer1"
width="
316"
height="
280"
classid="
CLSID:
6BF52A52-394A-11d3-B153-00C04F79FAA6"
codebase="
align="
baseline"
border="
0"
standby="
LoadingMicrosoftWindowsMediaPlayercomponents..."
type="
application/x-oleobject"
paramname="
URL"
../PlayMusic"
autoStart"
true"
invokeURLs"
false"
playCount"
100"
defaultFrame"
datawindow"
embedsrc="
application/x-mplayer2"
pluginspage="
showcontrols="
1"
showpositioncontrols="
showaudiocontrols="
showtracker="
showdisplay="
showstatusbar="
autosize="
showgotobar="
showcaptioning="
autostart="
autorewind="
animationatstart="
transparentatstart="
allowscan="
enablecontextmenu="
clicktoplay="
defaultframe="
invokeurls="
/embed>
/object>
/p>
-->
--使用Realplayer播放媒体,可以播放几乎任何类型的媒体,包括mp3,RM等-->
OBJECTID=RVOCXCLASSID="
clsid:
CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"
WIDTH=292HEIGHT=294>
PARAMNAME="
SRC"
VALUE="
Media/猫和老鼠.rm"
CONSOLE"
one"
CONTROLS"
ImageWindow,ControlPanel"
BACKGROUNDCOLOR"
white"
CENTER"
autostart"
351"
284"
audio/x-pn-realaudio-plugin"
/OBJECT>
--使用默认的Player播放媒体-->
其中的“../PlayMusic”是一个Servlet,代码如下:
PlayMusic
publicclassPlayMusicextendsjavax.servlet.http.HttpServletimplementsjavax.servlet.Servlet{
publicPlayMusic(){
protectedvoid