Upload_old.asp
上传用户:lwb168
上传日期:2021-10-31
资源大小:722k
文件大小:12k
源码类别:

Email服务器

开发平台:

ASP/ASPX

  1. <!--#include file="Include/Startup.asp"-->
  2. <!--#include file="Include/upfile_class.asp"-->
  3. <%
  4. '☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
  5. '★                                                                  ★
  6. '☆                eWebEditor - eWebSoft在线编辑器                   ☆
  7. '★                                                                  ★
  8. '☆  版权所有: eWebSoft.com                                          ☆
  9. '★                                                                  ★
  10. '☆  程序制作: eWeb开发团队                                          ☆
  11. '★            email:webmaster@webasp.net                            ★
  12. '☆            QQ:589808                                             ☆
  13. '★                                                                  ★
  14. '☆  相关网址: [产品介绍]http://www.eWebSoft.com/Product/eWebEditor/ ☆
  15. '★            [支持论坛]http://bbs.eWebSoft.com/                    ★
  16. '☆                                                                  ☆
  17. '★  主页地址: http://www.eWebSoft.com/   eWebSoft团队及产品         ★
  18. '☆            http://www.webasp.net/     WEB技术及应用资源网站      ☆
  19. '★            http://bbs.webasp.net/     WEB技术交流论坛            ★
  20. '★                                                                  ★
  21. '☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
  22. %>
  23. <%
  24. Server.ScriptTimeOut = 1800
  25. ' 参数变量
  26. Dim sType, sStyleName
  27. ' 设置变量
  28. Dim sAllowExt, nAllowSize, sUploadDir, nUploadObject, nAutoDir, sBaseUrl, sContentPath
  29. ' 接口变量
  30. Dim sFileExt, sOriginalFileName, sSaveFileName, sPathFileName, nFileNum
  31. Call DBConnBegin() ' 初始化数据库连接
  32. Call InitUpload() ' 初始化上传变量
  33. Call DBConnEnd() ' 断开数据库连接
  34. Dim sAction
  35. sAction = UCase(Trim(Request.QueryString("action")))
  36. Select Case sAction
  37. Case "REMOTE"
  38. Call DoRemote() ' 远程自动获取
  39. Case "SAVE"
  40. Call ShowForm() ' 显示上传表单
  41. Call DoSave() ' 存文件
  42. Case Else
  43. Call ShowForm() ' 显示上传表单
  44. End Select
  45. Sub ShowForm() 
  46. %>
  47. <HTML>
  48. <HEAD>
  49. <TITLE>文件上传</TITLE>
  50. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  51. <style type="text/css">
  52. body, a, table, div, span, td, th, input, select{font:9pt;font-family: "宋体", Verdana, Arial, Helvetica, sans-serif;}
  53. body {padding:0px;margin:0px}
  54. </style>
  55. <script language="JavaScript" src="dialog/dialog.js"></script>
  56. </head>
  57. <body bgcolor=menu>
  58. <form action="?action=save&type=<%=sType%>&style=<%=sStyleName%>" method=post name=myform enctype="multipart/form-data">
  59. <input type=file name=uploadfile size=1 style="width:100%" onchange="originalfile.value=this.value">
  60. <input type=hidden name=originalfile value="">
  61. </form>
  62. <script language=javascript>
  63. var sAllowExt = "<%=sAllowExt%>";
  64. // 检测上传表单
  65. function CheckUploadForm() {
  66. if (!IsExt(document.myform.uploadfile.value,sAllowExt)){
  67. parent.UploadError("提示:nn请选择一个有效的文件,n支持的格式有("+sAllowExt+")!");
  68. return false;
  69. }
  70. return true
  71. }
  72. // 提交事件加入检测表单
  73. var oForm = document.myform ;
  74. oForm.attachEvent("onsubmit", CheckUploadForm) ;
  75. if (! oForm.submitUpload) oForm.submitUpload = new Array() ;
  76. oForm.submitUpload[oForm.submitUpload.length] = CheckUploadForm ;
  77. if (! oForm.originalSubmit) {
  78. oForm.originalSubmit = oForm.submit ;
  79. oForm.submit = function() {
  80. if (this.submitUpload) {
  81. for (var i = 0 ; i < this.submitUpload.length ; i++) {
  82. this.submitUpload[i]() ;
  83. }
  84. }
  85. this.originalSubmit() ;
  86. }
  87. }
  88. // 上传表单已装入完成
  89. try {
  90. parent.UploadLoaded();
  91. }
  92. catch(e){
  93. }
  94. </script>
  95. </body>
  96. </html>
  97. <% 
  98. End Sub 
  99. ' 保存操作
  100. Sub DoSave()
  101. ' 默认无组件上传类
  102. Call DoUpload_Class
  103. sPathFileName = sContentPath & sSaveFileName
  104. Call OutScript("parent.UploadSaved('" & sPathFileName & "');var obj=parent.dialogArguments.dialogArguments;if (!obj) obj=parent.dialogArguments;try{obj.addUploadFile('" & sOriginalFileName & "', '" & sSaveFileName & "', '" & sPathFileName & "');} catch(e){}")
  105. End Sub
  106. ' 自动获取远程文件
  107. Sub DoRemote()
  108. Dim sContent, i
  109. For i = 1 To Request.Form("eWebEditor_UploadText").Count 
  110. sContent = sContent & Request.Form("eWebEditor_UploadText")(i) 
  111. Next
  112. If sAllowExt <> "" Then
  113. sContent = ReplaceRemoteUrl(sContent, sAllowExt)
  114. End If
  115. Response.Write "<HTML><HEAD><TITLE>远程上传</TITLE><meta http-equiv='Content-Type' content='text/html; charset=gb2312'></head><body>" & _
  116. "<input type=hidden id=UploadText value=""" & inHTML(sContent) & """>" & _
  117. "</body></html>"
  118. Call OutScriptNoBack("parent.setHTML(UploadText.value);try{parent.addUploadFile('" & sOriginalFileName & "', '" & sSaveFileName & "', '" & sPathFileName & "');} catch(e){} parent.remoteUploadOK();")
  119. End Sub
  120. ' 无组上传类
  121. Sub DoUpload_Class()
  122. On Error Resume Next
  123. Dim oUpload, oFile
  124. ' 建立上传对象
  125. Set oUpload = New upfile_class
  126. ' 取得上传数据,限制最大上传
  127. oUpload.GetData(nAllowSize*1024)
  128. If oUpload.Err > 0 Then
  129. Select Case oUpload.Err
  130. Case 1
  131. Call OutScript("parent.UploadError('请选择有效的上传文件!')")
  132. Case 2
  133. Call OutScript("parent.UploadError('你上传的文件总大小超出了最大限制(" & nAllowSize & "KB)!')")
  134. End Select
  135. Response.End
  136. End If
  137. Set oFile = oUpload.File("uploadfile")
  138. sFileExt = LCase(oFile.FileExt)
  139. Call CheckValidExt(sFileExt)
  140. sOriginalFileName = oFile.FileName
  141. sSaveFileName = GetRndFileName(sFileExt)
  142. oFile.SaveToFile Server.Mappath(sUploadDir & sSaveFileName)
  143. Set oFile = Nothing
  144. Set oUpload = Nothing
  145. End Sub
  146. ' 取随机文件名
  147. Function GetRndFileName(sExt)
  148. Dim sRnd
  149. Randomize
  150. sRnd = Int(900 * Rnd) + 100
  151. GetRndFileName = year(now) & month(now) & day(now) & hour(now) & minute(now) & second(now) & sRnd & "." & sExt
  152. End Function
  153. ' 输出客户端脚本
  154. Sub OutScript(str)
  155. Response.Write "<script language=javascript>" & str & ";history.back()</script>"
  156. End Sub
  157. Sub OutScriptNoBack(str)
  158. Response.Write "<script language=javascript>" & str & "</script>"
  159. End Sub
  160. ' 检测扩展名的有效性
  161. Sub CheckValidExt(sExt)
  162. Dim b, i, aExt
  163. b = False
  164. aExt = Split(sAllowExt, "|")
  165. For i = 0 To UBound(aExt)
  166. If LCase(aExt(i)) = sExt Then
  167. b = True
  168. Exit For
  169. End If
  170. Next
  171. If b = False Then
  172. OutScript("parent.UploadError('提示:nn请选择一个有效的文件,n支持的格式有("+sAllowExt+")!')")
  173. Response.End
  174. End If
  175. End Sub
  176. ' 初始化上传限制数据
  177. Sub InitUpload()
  178. sType = UCase(Trim(Request.QueryString("type")))
  179. sStyleName = Get_SafeStr(Trim(Request.QueryString("style")))
  180. sSql = "select * from ewebeditor_style where s_name='" & sStyleName & "'"
  181. oRs.Open sSql, oConn, 0, 1
  182. If Not oRs.Eof Then
  183. sBaseUrl = oRs("S_BaseUrl")
  184. nUploadObject = oRs("S_UploadObject")
  185. nAutoDir = oRs("S_AutoDir")
  186. sUploadDir = oRs("S_UploadDir")
  187. Select Case sBaseUrl
  188. Case "0"
  189. sContentPath = oRs("S_ContentPath")
  190. Case "1"
  191. sContentPath = RelativePath2RootPath(sUploadDir)
  192. Case "2"
  193. sContentPath = RootPath2DomainPath(RelativePath2RootPath(sUploadDir))
  194. End Select
  195. Select Case sType
  196. Case "REMOTE"
  197. sAllowExt = oRs("S_RemoteExt")
  198. nAllowSize = oRs("S_RemoteSize")
  199. Case "FILE"
  200. sAllowExt = oRs("S_FileExt")
  201. nAllowSize = oRs("S_FileSize")
  202. Case "MEDIA"
  203. sAllowExt = oRs("S_MediaExt")
  204. nAllowSize = oRs("S_MediaSize")
  205. Case "FLASH"
  206. sAllowExt = oRs("S_FlashExt")
  207. nAllowSize = oRs("S_FlashSize")
  208. Case Else
  209. sAllowExt = oRs("S_ImageExt")
  210. nAllowSize = oRs("S_ImageSize")
  211. End Select
  212. Else
  213. OutScript("parent.UploadError('无效的样式ID号,请通过页面上的链接进行操作!')")
  214. End If
  215. oRs.Close
  216. ' 任何情况下都不允许上传asp脚本文件
  217. sAllowExt = Replace(UCase(sAllowExt), "ASP", "")
  218. End Sub
  219. ' 转为根路径格式
  220. Function RelativePath2RootPath(url)
  221. Dim sTempUrl
  222. sTempUrl = url
  223. If Left(sTempUrl, 1) = "/" Then
  224. RelativePath2RootPath = sTempUrl
  225. Exit Function
  226. End If
  227. Dim sWebEditorPath
  228. sWebEditorPath = Request.ServerVariables("SCRIPT_NAME")
  229. sWebEditorPath = Left(sWebEditorPath, InstrRev(sWebEditorPath, "/") - 1)
  230. Do While Left(sTempUrl, 3) = "../"
  231. sTempUrl = Mid(sTempUrl, 4)
  232. sWebEditorPath = Left(sWebEditorPath, InstrRev(sWebEditorPath, "/") - 1)
  233. Loop
  234. RelativePath2RootPath = sWebEditorPath & "/" & sTempUrl
  235. End Function
  236. ' 根路径转为带域名全路径格式
  237. Function RootPath2DomainPath(url)
  238. Dim sHost, sPort
  239. sHost = Split(Request.ServerVariables("SERVER_PROTOCOL"), "/")(0) & "://" & Request.ServerVariables("HTTP_HOST")
  240. sPort = Request.ServerVariables("SERVER_PORT")
  241. If sPort <> "80" Then
  242. sHost = sHost & ":" & sPort
  243. End If
  244. RootPath2DomainPath = sHost & url
  245. End Function
  246. '================================================
  247. '作  用:替换字符串中的远程文件为本地文件并保存远程文件
  248. '参  数:
  249. ' sHTML : 要替换的字符串
  250. ' sExt : 执行替换的扩展名
  251. '================================================
  252. Function ReplaceRemoteUrl(sHTML, sExt)
  253. Dim s_Content
  254. s_Content = sHTML
  255. If IsObjInstalled("Microsoft.XMLHTTP") = False then
  256. ReplaceRemoteUrl = s_Content
  257. Exit Function
  258. End If
  259. Dim re, RemoteFile, RemoteFileurl, SaveFileName, SaveFileType
  260. Set re = new RegExp
  261. re.IgnoreCase  = True
  262. re.Global = True
  263. 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 & ")))"
  264. Set RemoteFile = re.Execute(s_Content)
  265. Dim a_RemoteUrl(), n, i, bRepeat
  266. n = 0
  267. ' 转入无重复数据
  268. For Each RemoteFileurl in RemoteFile
  269. If n = 0 Then
  270. n = n + 1
  271. Redim a_RemoteUrl(n)
  272. a_RemoteUrl(n) = RemoteFileurl
  273. Else
  274. bRepeat = False
  275. For i = 1 To UBound(a_RemoteUrl)
  276. If UCase(RemoteFileurl) = UCase(a_RemoteUrl(i)) Then
  277. bRepeat = True
  278. Exit For
  279. End If
  280. Next
  281. If bRepeat = False Then
  282. n = n + 1
  283. Redim Preserve a_RemoteUrl(n)
  284. a_RemoteUrl(n) = RemoteFileurl
  285. End If
  286. End If
  287. Next
  288. ' 开始替换操作
  289. nFileNum = 0
  290. For i = 1 To n
  291. SaveFileType = Mid(a_RemoteUrl(i), InstrRev(a_RemoteUrl(i), ".") + 1)
  292. SaveFileName = GetRndFileName(SaveFileType)
  293. If SaveRemoteFile(SaveFileName, a_RemoteUrl(i)) = True Then
  294. nFileNum = nFileNum + 1
  295. If nFileNum > 0 Then
  296. sOriginalFileName = sOriginalFileName & "|"
  297. sSaveFileName = sSaveFileName & "|"
  298. sPathFileName = sPathFileName & "|"
  299. End If
  300. sOriginalFileName = sOriginalFileName & Mid(a_RemoteUrl(i), InstrRev(a_RemoteUrl(i), "/") + 1)
  301. sSaveFileName = sSaveFileName & SaveFileName
  302. sPathFileName = sPathFileName & sContentPath & SaveFileName
  303. s_Content = Replace(s_Content, a_RemoteUrl(i), sContentPath & SaveFileName, 1, -1, 1)
  304. End If
  305. Next
  306. ReplaceRemoteUrl = s_Content
  307. End Function
  308. '================================================
  309. '作  用:保存远程的文件到本地
  310. '参  数:s_LocalFileName ------ 本地文件名
  311. '  s_RemoteFileUrl ------ 远程文件URL
  312. '返回值:True  ----成功
  313. '        False ----失败
  314. '================================================
  315. Function SaveRemoteFile(s_LocalFileName, s_RemoteFileUrl)
  316. Dim Ads, Retrieval, GetRemoteData
  317. Dim bError
  318. bError = False
  319. SaveRemoteFile = False
  320. On Error Resume Next
  321. Set Retrieval = Server.CreateObject("Microsoft.XMLHTTP")
  322. With Retrieval
  323. .Open "Get", s_RemoteFileUrl, False, "", ""
  324. .Send
  325. GetRemoteData = .ResponseBody
  326. End With
  327. Set Retrieval = Nothing
  328. If LenB(GetRemoteData) > nAllowSize*1024 Then
  329. bError = True
  330. Else
  331. Set Ads = Server.CreateObject("Adodb.Stream")
  332. With Ads
  333. .Type = 1
  334. .Open
  335. .Write GetRemoteData
  336. .SaveToFile Server.MapPath(sUploadDir & s_LocalFileName), 2
  337. .Cancel()
  338. .Close()
  339. End With
  340. Set Ads=nothing
  341. End If
  342. If Err.Number = 0 And bError = False Then
  343. SaveRemoteFile = True
  344. Else
  345. Err.Clear
  346. End If
  347. End Function
  348. '================================================
  349. '作  用:检查组件是否已经安装
  350. '参  数:strClassString ----组件名
  351. '返回值:True  ----已经安装
  352. '        False ----没有安装
  353. '================================================
  354. Function IsObjInstalled(strClassString)
  355. On Error Resume Next
  356. IsObjInstalled = False
  357. Err = 0
  358. Dim xTestObj
  359. Set xTestObj = Server.CreateObject(strClassString)
  360. If 0 = Err Then IsObjInstalled = True
  361. Set xTestObj = Nothing
  362. Err = 0
  363. End Function
  364. %>