ASP檔案上傳神功 第二重(招勢圖加內功心法)

來源:互聯網
上載者:User
上傳 第二重:文本資訊與圖片檔案同時提交儲存到資料庫
圖片檔案也可儲存到磁碟檔案

  這個問題已經不是什麼新鮮問題了,網上也有大把的教程,但大多數是授人以魚,而不授人以漁,經過辛苦的資料收集,思考,調試,整理,我基本上已經把這個問題從原理上搞清楚了,現在根據我自己的理解,在範常式序的基礎上,加以解釋,希望能對部分網友(比我還菜的:-))有所協助。

  請諸位大蝦能對其中的不正或不良這處予以指正。

  程式中stream對象的用法上參考了“化境HTTP上傳程式 Version 2.0”在代碼,在此對稻香老農和梁無懼表示衷心的感謝和由衷的敬意。

  上次講了單個圖片檔案儲存到資料庫,這次講一下文本資訊與圖片檔案同時提交儲存到資料庫,圖片檔案也可儲存到磁碟檔案。

MultiInputOrImageToData.asp
<%@ Language=VBScript %>
<% option explicit %>

<%
 '把一段位元據寫入到一個檔案
 sub saveBin2File(srmSource,posB,posLen,strPath)
  dim srmObj
  set srmObj = server.CreateObject("adodb.stream")
  srmObj.Type = 1
  srmObj.Mode = 3
  srmObj.Open
   
  srmSource.Position = posB-1
  srmSource.CopyTo srmObj,posLen
  srmObj.Position = 0
  srmObj.SaveToFile strPath,2   '如果該檔案已經存在,無條件覆蓋
  srmObj.Close
  set srmObj = nothing
 end sub

 '位元據轉換為字串,包括漢字
 function getTextfromBin(srmSource,posBegin,posLen)
  dim srmObj, strData
  set srmObj = server.CreateObject("adodb.stream")
  srmObj.Type = 1
  srmObj.Mode = 3
  srmObj.Open

  srmSource.position = posBegin-1   '位置計數首數不一樣,這個對象是對0開始的
  srmSource.CopyTo srmObj,posLen
  srmObj.Position = 0
  srmObj.Type = 2
  srmObj.Charset = "gb2312"
  strData = srmObj.ReadText

  srmObj.Close
  set srmObj = nothing
   
  getTextfromBin = strData
 end function
    
 '雙位元組字元串轉換成單位元組字串
 function getSBfromDB(bytString)
  dim bin, i
  bin = ""
  for i=1 to len(bytString)
   bin = bin & chrb(asc(mid(bytString,i,1)))
  next
  getSBfromDB = bin
 end function

 '單位元組字串轉換成雙位元組字元串
 function getDBfromSB(bitString)
  dim str, i
  str = ""
  for i=1 to lenb(bitString)
   str = str & chr(ascb(midb(bitString,i,1)))
  next
  getDBfromSB = str
 end function
 
 '從一個完整路徑中析出檔案名稱
 function getFileNamefromPath(strPath)
  getFileNamefromPath = mid(strPath,instrrev(strPath,"\")+1)
 end function

 '判斷函數
 function iif(cond,expr1,expr2)
  if cond then
   iif = expr1
  else
   iif = expr2
  end if
 end function
 
 '定義資料庫連接字串
 dim cnstr
 cnstr = "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.MapPath("./upload.mdb")
%>

<HTML>
 <HEAD>
  <title>多個表單域或映像同步儲存到資料庫</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
 </HEAD>
 <body>
<p>導覽功能表:<b>上傳圖片</b> <a href="ShowImageListFromData2.asp">顯示圖片</a><hr></p>
 
<%
 if request.ServerVariables("REQUEST_METHOD") = "POST" then

  dim sCome, binData
  dim posB, posE, posSB, posSE
  dim binCrlf, binSub
  dim strTitle, strFileName, strContentType, posFileBegin, posFileLen, aryFileInfo
  dim i, j
  dim dicData
  dim strName,strValue
  
  binCrlf = getSBfromDB(vbcrlf)  '定義一個單位元組的斷行符號分行符號
  binSub = getSBfromDB("--")    '定義一個單位元組的“--”字串
  
  set sCome = server.CreateObject("adodb.stream")
  sCome.Type = 1  '指定返回資料類型 adTypeBinary=1,adTypeText=2
  sCome.Mode = 3  '指定開啟模式 adModeRead=1,adModeWrite=2,adModeReadWrite=3
  sCome.Open
  sCome.Write request.BinaryRead(request.TotalBytes)
  
  sCome.Position = 0
  binData = sCome.Read
  'response.BinaryWrite binData    '調試用:顯示提交的所有資料
  'response.Write "<hr>"       '調試用
  
  posB = instrb(binData,binSub)
  posB = instrb(posB,binData,bincrlf) + 2   '+2是加入斷行符號分行符號本身的長度
  posB = instrb(posB,binData,getSBfromDB("name=""")) + 6
  
  set dicData = server.CreateObject("scripting.dictionary")    '用來儲存資訊
  
  do until posB=6
   posE = instrb(posB,binData,getSBfromDB(""""))
   'Response.Write "name=" & getTextfromBin(sCome,posB,posE-posB) & "<br>"
   strName = getTextfromBin(sCome,posB,posE-posB)
   
   posB = posE + 1     '指標移動到“"”的後面
   posE = instrb(posB,binData,bincrlf)
   'Response.Write posB & "->" & posE & "<br>"
  
   if instrb(midb(binData,posB,posE-posB),getSBfromDB("filenam



相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。