upload.jsp
上传用户:huijianzhu
上传日期:2009-11-25
资源大小:9825k
文件大小:15k
源码类别:

电子政务应用

开发平台:

Java

  1. <%@ page language="java" pageEncoding="GB2312" contentType="text/html;charset=GB2312" %>
  2. <%@ page import="cn.com.xunuo.util.PropertyManager"%>
  3. <%
  4. //Server.ScriptTimeOut = 1800
  5. //参数变量
  6. String sType = null;//文件类型
  7. String sStyleName = null; //样式类型
  8. //设置变量
  9. String sAllowExt = null;//允许的扩展名
  10. long lAllowSize = 0l;//允许的文件大小
  11. String sUploadDir = null ;//上传文件路径
  12. int nUploadObject = 0 ; //上传文件的数量
  13. int nAutoDir = 0;//是否自动选择目录
  14. String sBaseUrl = null; //路径形式 "0" : 相对路径 "1": 根路径格式 "2":存储完整访问路径
  15. String sContentPath = null;//附件目录
  16. //接口变量
  17. String sFileExt;//文件扩展名
  18. String sOriginalFileName = null;//源文件名
  19. String sSaveFileName = null;//存储文件名
  20. String sPathFileName = null;//文件路径
  21. int nFileNum = 0; //文件数量
  22. //Call DBConnBegin() ' 初始化数据库连接
  23. //Call InitUpload() ' 初始化上传变量
  24. //Call DBConnEnd() ' 断开数据库连接
  25. String sAction = null;
  26. sAction = request.getParameter("action");
  27. sAction = sAction!=null?sAction.trim().toLowerCase():sAction;
  28. sType = request.getParameter("type");
  29. sStyleName = request.getParameter("style");
  30. sUploadDir = PropertyManager.getProperty("Cms.UploadPath");//保存路径
  31. sBaseUrl = "1";
  32. sContentPath = PropertyManager.getProperty("Cms.UploadPath");
  33. if (sBaseUrl.equals("0"))
  34. {
  35. sContentPath  = ""  ;
  36. }
  37. if (sBaseUrl.equals("1"))
  38. {
  39. sContentPath = sUploadDir ;
  40. }
  41. if (sBaseUrl.equals("2"))
  42. {
  43. sContentPath = "完整访问路径";
  44. }
  45. //设置允许上传的文件扩展名
  46. if (sType.equals("remote"))
  47. {
  48. sAllowExt = "gif|jpg|jpeg|bmp|png";
  49. lAllowSize = 100*1024*1024;//10M
  50. }else if (sType.equals("file"))
  51. {
  52. sAllowExt = "rar|zip|exe|doc|xls|chm|hlp";
  53. lAllowSize = 10*1024*1024;//10M
  54. }else if (sType.equals("flash"))
  55. {
  56. sAllowExt = "swf";
  57. lAllowSize = 100*1024*1024;//100M
  58. }else if (sType.equals("media"))
  59. {
  60. sAllowExt = "rm|mp3|wav|mid|midi|ra|avi|mpg|mpeg|asf|asx|wma|mov|rmvb";
  61. lAllowSize = 1000*1024*1024;//100M
  62. }else if (sType.equals("image"))
  63. {
  64. sAllowExt = "gif|jpg|jpeg|bmp|png";
  65. lAllowSize = 100*1024*1024;//100M
  66. }else
  67. {
  68. sAllowExt = "gif|jpg|jpeg|bmp|png";
  69. lAllowSize = 100*1024*1024;//100M
  70. }
  71. /*Select Case sAction
  72. Case "REMOTE"
  73. Call DoRemote() ' 远程自动获取
  74. Case "SAVE"
  75. Call ShowForm() ' 显示上传表单
  76. Call DoSave() ' 存文件
  77. Case Else
  78. Call ShowForm() ' 显示上传表单
  79. End Select
  80.  public void ShowForm()
  81. {*/
  82. if (sAction!=null && sAction.equals("remote"))
  83. {
  84. /**如果设置了远程文件自动保存,提交到服务器前,会先将远程文件保存到本地:如图片可以先保存到本地
  85.  *如有链接:http://localhost:8080/test.gif
  86.  *程序会先将数据存取到指定目录下,然后将路径改成Editor设置的路径*/
  87. }else
  88. {
  89. %>
  90. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
  91. <HTML>
  92. <HEAD>
  93. <TITLE>文件上传</TITLE>
  94. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  95. <style type="text/css">
  96. body, a, table, div, span, td, th, input, select{font:9pt;font-family: "宋体", Verdana, Arial, Helvetica, sans-serif;}
  97. body {padding:0px;margin:0px}
  98. </style>
  99. <script language="JavaScript" src="./dialog/dialog.js"></script>
  100. </head>
  101. <body bgcolor="menu">
  102. <form action="upload.jsp?action=save&type=<%=sType%>&style=<%=sStyleName%>" method="post" name="myform" enctype="multipart/form-data">
  103. <input type=file name="uploadfile" size=1 style="width:100%" onchange="originalfile.value=this.value">
  104. <input type="hidden" name="originalfile" value="">
  105. </form>
  106. <script language=javascript>
  107. var sAllowExt = "<%=sAllowExt%>";
  108. // 检测上传表单
  109. function CheckUploadForm() {
  110. if (!IsExt(document.myform.uploadfile.value,sAllowExt)){
  111. parent.UploadError("提示:nn请选择一个有效的文件,n支持的格式有("+sAllowExt+")!");
  112. return false;
  113. }
  114. return true
  115. }
  116. // 提交事件加入检测表单
  117. var oForm = document.myform ;
  118. oForm.attachEvent("onsubmit", CheckUploadForm) ;
  119. if (! oForm.submitUpload) oForm.submitUpload = new Array() ;
  120. oForm.submitUpload[oForm.submitUpload.length] = CheckUploadForm ;
  121. if (! oForm.originalSubmit) {
  122. oForm.originalSubmit = oForm.submit ;
  123. oForm.submit = function() {
  124. if (this.submitUpload) {
  125. for (var i = 0 ; i < this.submitUpload.length ; i++) {
  126. this.submitUpload[i]() ;
  127. }
  128. }
  129. this.originalSubmit() ;
  130. }
  131. }
  132. // 上传表单已装入完成
  133. try {
  134. parent.UploadLoaded();
  135. }
  136. catch(e){
  137. }
  138. </script>
  139. </body>
  140. </html>
  141. <%  
  142. //System.out.println(sAction);
  143. if (sAction!=null && sAction.equals("save"))
  144. {
  145.     //调用SmartUpload实现文件上传功能
  146. //上传成功之后,改变父窗口
  147.     //上载附件
  148.         String   strFileName = null;
  149.         String   strExtName = null;
  150. String   strTmp = null;
  151.         java.util.Date nowDate = new java.util.Date(System.currentTimeMillis());
  152.          %>
  153.  <jsp:useBean id="mySmartUpload" scope="page" class="com.jspsmart.upload.SmartUpload"/>
  154.  <%
  155.         //************upload start****************************
  156.         mySmartUpload.initialize(pageContext);
  157. //sContentPath = request.getContextPath() + sContentPath;
  158.         //mySmartUpload.setTotalMaxFileSize(lAllowSize);
  159. //System.out.println("tttt" +  sContentPath);
  160.         
  161.         try {
  162. mySmartUpload.upload();
  163.             for (int i = 0; i < mySmartUpload.getFiles().getCount(); i++) {
  164.                 com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
  165.                 if (!myFile.isMissing()) 
  166. {
  167.                     strTmp = Long.toString(nowDate.getTime());          //获取当前时间
  168.                     strFileName = myFile.getFileName();
  169.                     sOriginalFileName = strFileName;  //获取上载文件原始名称
  170.                     strExtName = strFileName.substring(strFileName.lastIndexOf('.'));        //获取上载文件的扩展名
  171.                     sSaveFileName = strTmp + strExtName;                 //生成一个新文件名(当前时间)
  172.                     sSaveFileName = sSaveFileName.toLowerCase();
  173. sPathFileName = sContentPath + sSaveFileName;
  174.                     // Save the files with its original names in a virtual path of the web server
  175. //System.out.println("ccccccccc"+application.getRealPath(sContentPath));
  176.                     myFile.saveAs(application.getRealPath(sContentPath) + "\"+ sSaveFileName,mySmartUpload.SAVE_AUTO);
  177. sSaveFileName = request.getContextPath() + "/" +sSaveFileName;
  178. sPathFileName = request.getContextPath() + sPathFileName;
  179. //System.out.println(sSaveFileName+"=============="+sPathFileName);
  180. //myFile.saveAs("/temp/cms" + "\"+ sSaveFileName,mySmartUpload.SAVE_AUTO);
  181.                 }
  182.             }// end for
  183.         }// end try
  184.         catch(Exception e){
  185.             //将Exception对象中的错误信息打印到网页上来
  186. System.out.println(e.toString());
  187.             java.io.StringWriter myout = new java.io.StringWriter();
  188.             e.printStackTrace(new java.io.PrintWriter(myout));
  189.             String trace = myout.toString();
  190.             out.print("<pre>"+trace+"</pre>");
  191.             String message = "<font color="#ff0000">发生错误!</font>";
  192.             out.print(message);
  193.         }// end catch
  194. %>
  195. <SCRIPT LANGUAGE="JavaScript">
  196. <!--
  197.     parent.UploadSaved("<%=sPathFileName%>");
  198.     var obj=parent.dialogArguments.dialogArguments;
  199. if (!obj) obj=parent.dialogArguments;
  200. try
  201. {
  202.  obj.addUploadFile("<%=sOriginalFileName%>","<%=sSaveFileName%>","<%=sPathFileName%>");
  203. }
  204. catch(e){}
  205. //-->
  206. </SCRIPT>
  207. <%
  208.     }
  209. }%>
  210. <%
  211. jspWriter = out;
  212. %>
  213. <%!
  214. private JspWriter jspWriter;
  215. /*public String GetRndFileName(String sExt)
  216. {
  217. String strReturn;
  218. strReturn = String.valueOf(System.currentTimeMillis()) + "." + sExt;
  219. return strReturn;
  220. }
  221. //输出客户端脚本
  222. public void OutScript(String str)
  223. {
  224. jspWriter.println("<script language=javascript>" + str + ";history.back()</script>");
  225. }
  226. public void OutScriptNoBack(String str)
  227. {
  228. jspWriter.println("<script language=javascript>" + str + "</script>");
  229. }*/
  230. /*public void DoSave()
  231. {
  232. //默认无组件上传类
  233. //Call DoUpload_Class
  234. sPathFileName = sContentPath + sSaveFileName;
  235. OutScript("parent.UploadSaved('" & sPathFileName & "');var obj=parent.dialogArguments.dialogArguments;if (!obj) obj=parent.dialogArguments;try{obj.addUploadFile('" & sOriginalFileName & "', '" & sSaveFileName & "', '" & sPathFileName & "');} catch(e){}");
  236. }*/
  237. /*自动获取远程文件
  238. public void DoRemote()
  239. {
  240. Dim sContent, i
  241. For i = 1 To Request.Form("eWebEditor_UploadText").Count 
  242. sContent = sContent & Request.Form("eWebEditor_UploadText")(i) 
  243. Next
  244. If sAllowExt <> "" Then
  245. sContent = ReplaceRemoteUrl(sContent, sAllowExt)
  246. End If
  247. Response.Write "<HTML><HEAD><TITLE>远程上传</TITLE><meta http-equiv='Content-Type' content='text/html; charset=gb2312'></head><body>" & _
  248. "<input type=hidden id=UploadText value=""" & inHTML(sContent) & """>" & _
  249. "</body></html>"
  250. Call OutScriptNoBack("parent.setHTML(UploadText.value);try{parent.addUploadFile('" & sOriginalFileName & "', '" & sSaveFileName & "', '" & sPathFileName & "');} catch(e){} parent.remoteUploadOK();")
  251. }*/
  252. /*
  253. public void DoUpload_Class()
  254. {
  255. On Error Resume Next
  256. Dim oUpload, oFile
  257. ' 建立上传对象
  258. Set oUpload = New upfile_class
  259. ' 取得上传数据,限制最大上传
  260. oUpload.GetData(nAllowSize*1024)
  261. If oUpload.Err > 0 Then
  262. Select Case oUpload.Err
  263. Case 1
  264. Call OutScript("parent.UploadError('请选择有效的上传文件!')")
  265. Case 2
  266. Call OutScript("parent.UploadError('你上传的文件总大小超出了最大限制(" & nAllowSize & "KB)!')")
  267. End Select
  268. Response.End
  269. End If
  270. Set oFile = oUpload.File("uploadfile")
  271. sFileExt = LCase(oFile.FileExt)
  272. Call CheckValidExt(sFileExt)
  273. sOriginalFileName = oFile.FileName
  274. sSaveFileName = GetRndFileName(sFileExt)
  275. oFile.SaveToFile Server.Mappath(sUploadDir & sSaveFileName)
  276. Set oFile = Nothing
  277. Set oUpload = Nothing
  278. }*/
  279. /*public String GetRndFileName(String sExt)
  280. {
  281. String strReturn;
  282. strReturn = String.valueOf(System.currentTimeMillis()) + "." + sExt;
  283. return strReturn;
  284. }
  285. //输出客户端脚本
  286. public void OutScript(String str)
  287. {
  288. out.println("<script language=javascript>" & str & ";history.back()</script>");
  289. }
  290. public void OutScriptNoBack(str)
  291. {
  292. out.println("<script language=javascript>" & str & "</script>");
  293. }
  294. */
  295. /*检测扩展名的有效性
  296. public void CheckValidExt(String sExt)
  297. {
  298. Dim b, i, aExt
  299. b = False
  300. aExt = Split(sAllowExt, "|")
  301. For i = 0 To UBound(aExt)
  302. If LCase(aExt(i)) = sExt Then
  303. b = True
  304. Exit For
  305. End If
  306. Next
  307. If b = False Then
  308. OutScript("parent.UploadError('提示:nn请选择一个有效的文件,n支持的格式有("+sAllowExt+")!')")
  309. Response.End
  310. End If
  311. }*/
  312. /*
  313. // 转为根路径格式
  314. Function RelativePath2RootPath(url)
  315. Dim sTempUrl
  316. sTempUrl = url
  317. If Left(sTempUrl, 1) = "/" Then
  318. RelativePath2RootPath = sTempUrl
  319. Exit Function
  320. End If
  321. Dim sWebEditorPath
  322. sWebEditorPath = Request.ServerVariables("SCRIPT_NAME")
  323. sWebEditorPath = Left(sWebEditorPath, InstrRev(sWebEditorPath, "/") - 1)
  324. Do While Left(sTempUrl, 3) = "../"
  325. sTempUrl = Mid(sTempUrl, 4)
  326. sWebEditorPath = Left(sWebEditorPath, InstrRev(sWebEditorPath, "/") - 1)
  327. Loop
  328. RelativePath2RootPath = sWebEditorPath & "/" & sTempUrl
  329. End Function
  330. */
  331. /*根路径转为带域名全路径格式
  332. Function RootPath2DomainPath(url)
  333. Dim sHost, sPort
  334. sHost = Split(Request.ServerVariables("SERVER_PROTOCOL"), "/")(0) & "://" & Request.ServerVariables("HTTP_HOST")
  335. sPort = Request.ServerVariables("SERVER_PORT")
  336. If sPort <> "80" Then
  337. sHost = sHost & ":" & sPort
  338. End If
  339. RootPath2DomainPath = sHost & url
  340. End Function*/
  341. //================================================
  342. //作  用:替换字符串中的远程文件为本地文件并保存远程文件
  343. //参  数:
  344. // sHTML : 要替换的字符串
  345. // sExt : 执行替换的扩展名
  346. //================================================
  347. /*Function ReplaceRemoteUrl(sHTML, sExt)
  348. Dim s_Content
  349. s_Content = sHTML
  350. If IsObjInstalled("Microsoft.XMLHTTP") = False then
  351. ReplaceRemoteUrl = s_Content
  352. Exit Function
  353. End If
  354. Dim re, RemoteFile, RemoteFileurl, SaveFileName, SaveFileType
  355. Set re = new RegExp
  356. re.IgnoreCase  = True
  357. re.Global = True
  358. re.Pattern = "((http|https|ftp|rtsp|mms):(//|\\){1}(([A-Za-z0-9_-])+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(S*/)((S)+[.]{1}(" & sExt & ")))"
  359. Set RemoteFile = re.Execute(s_Content)
  360. Dim a_RemoteUrl(), n, i, bRepeat
  361. n = 0
  362. ' 转入无重复数据
  363. For Each RemoteFileurl in RemoteFile
  364. If n = 0 Then
  365. n = n + 1
  366. Redim a_RemoteUrl(n)
  367. a_RemoteUrl(n) = RemoteFileurl
  368. Else
  369. bRepeat = False
  370. For i = 1 To UBound(a_RemoteUrl)
  371. If UCase(RemoteFileurl) = UCase(a_RemoteUrl(i)) Then
  372. bRepeat = True
  373. Exit For
  374. End If
  375. Next
  376. If bRepeat = False Then
  377. n = n + 1
  378. Redim Preserve a_RemoteUrl(n)
  379. a_RemoteUrl(n) = RemoteFileurl
  380. End If
  381. End If
  382. Next
  383. ' 开始替换操作
  384. nFileNum = 0
  385. For i = 1 To n
  386. SaveFileType = Mid(a_RemoteUrl(i), InstrRev(a_RemoteUrl(i), ".") + 1)
  387. SaveFileName = GetRndFileName(SaveFileType)
  388. If SaveRemoteFile(SaveFileName, a_RemoteUrl(i)) = True Then
  389. nFileNum = nFileNum + 1
  390. If nFileNum > 0 Then
  391. sOriginalFileName = sOriginalFileName & "|"
  392. sSaveFileName = sSaveFileName & "|"
  393. sPathFileName = sPathFileName & "|"
  394. End If
  395. sOriginalFileName = sOriginalFileName & Mid(a_RemoteUrl(i), InstrRev(a_RemoteUrl(i), "/") + 1)
  396. sSaveFileName = sSaveFileName & SaveFileName
  397. sPathFileName = sPathFileName & sContentPath & SaveFileName
  398. s_Content = Replace(s_Content, a_RemoteUrl(i), sContentPath & SaveFileName, 1, -1, 1)
  399. End If
  400. Next
  401. ReplaceRemoteUrl = s_Content
  402. End Function
  403. */
  404. /*
  405. //================================================
  406. //作  用:保存远程的文件到本地
  407. //参  数:s_LocalFileName ------ 本地文件名
  408. //  s_RemoteFileUrl ------ 远程文件URL
  409. //返回值:True  ----成功
  410. //        False ----失败
  411. //================================================
  412. Function SaveRemoteFile(s_LocalFileName, s_RemoteFileUrl)
  413. Dim Ads, Retrieval, GetRemoteData
  414. Dim bError
  415. bError = False
  416. SaveRemoteFile = False
  417. On Error Resume Next
  418. Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
  419. With Retrieval
  420. .Open "Get", s_RemoteFileUrl, False, "", ""
  421. .Send
  422. GetRemoteData = .ResponseBody
  423. End With
  424. Set Retrieval = Nothing
  425. If LenB(GetRemoteData) > nAllowSize*1024 Then
  426. bError = True
  427. Else
  428. Set Ads = Server.CreateObject("Adodb.Stream")
  429. With Ads
  430. .Type = 1
  431. .Open
  432. .Write GetRemoteData
  433. .SaveToFile Server.MapPath(sUploadDir & s_LocalFileName), 2
  434. .Cancel()
  435. .Close()
  436. End With
  437. Set Ads=nothing
  438. End If
  439. If Err.Number = 0 And bError = False Then
  440. SaveRemoteFile = True
  441. Else
  442. Err.Clear
  443. End If
  444. End Function
  445. */
  446. //================================================
  447. //作  用:检查组件是否已经安装
  448. //参  数:strClassString ----组件名
  449. //返回值:True  ----已经安装
  450. //        False ----没有安装
  451. //================================================
  452. /*
  453. Function IsObjInstalled(strClassString)
  454. On Error Resume Next
  455. IsObjInstalled = False
  456. Err = 0
  457. Dim xTestObj
  458. Set xTestObj = Server.CreateObject(strClassString)
  459. If 0 = Err Then IsObjInstalled = True
  460. Set xTestObj = Nothing
  461. Err = 0
  462. End Function
  463. */
  464. %>