예.asp
< %@LANGUAGE="VBSCRIPT " CODEPAGE="65001"%>
<!--#include file="SundyUpload.asp"-->
<%
'이 예의 문서 인코딩은 UTF-8입니다. 다른 인코딩 시스템인 경우 해당 인코딩으로 변환하세요. 그렇지 않으면 형식으로 얻은 데이터가 깨질 수 있습니다.
희미한 objUpload,opt
DimxmlPath
희미한 파일양식 이름,obj파일,카운터
opt = request.QueryString("opt")
opt = "업로드"인 경우 그런 다음
xmlPath = Server.MapPath(request.QueryString("xmlPath"))'가상 경로를 실제 경로로 변환
Set objUpload=new SundyUpload '업로드 객체 생성
objUpload.UploadInit xmlPath,"utf-8"
카운터=1
Response.Write("일반 형식:" & objUpload.Form("normalForm") & "<BR><BR>")'양식 데이터 가져오기
objUpload.objFile의 각 fileFormName에 대해
objFile=objUpload.objFile(fileFormName) 설정
fileSize = objFile.FileSize
strTemp= objFile.FilePath
응답.strTemp 쓰기
파일 이름 = mid(strTemp,InStrRev(strTemp, "")+1)
fileSize > 0이면
Response.Write("파일 크기:" & fileSize & "<BR>")
Response.Write("파일 이름:" & objFile.FilePath & "<BR>")
' Response.Write("파일 설명:" & objUpload.Form("fileDesc" & counter) & "<BR><BR>")
objFile.SaveAs Server.MapPath(".") & "upload" & 파일 이름
Response.Write "저장 위치: "&Server.MapPath(".") & "upload" & fileName & "<br><br>"
종료 조건
카운터 = 카운터 + 1
다음
종료 조건
'진행률 표시줄 데이터 파일 업로드(XML 파일의 가상 경로 지정)
'여러 사람이 동시에 업로드할 수 있고 서로 다른 진행 데이터가 필요할 수 있으므로 무작위로 작성하는 것이 가장 좋습니다.
'업로드 프로세스 중에 진행 데이터가 변경될 수 있도록 제출 시 이 경로를 업로드 구성 요소에 전달해야 합니다.
'클라이언트는 Javascript를 사용하여 이 XML 파일을 읽고 진행 상황을 표시합니다.
xmlPath = "업로드/" & 타이머 & ".xml"
%>
<html>
<머리>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Sundy 업로드 진행률 표시줄 예</title>
<스크립트 언어="자바스크립트">
함수 chkFrm(){
var objFrm = document.frmUpload;
if (objFrm.file1.value=="" && objFrm.file2.value==""){
Alert("파일을 선택해주세요");
objFrm.file1.focus();
거짓을 반환;
}
objFrm.action = "Example.asp?opt=업로드&xmlPath=<%=xmlPath%>";
startProgress('<%=xmlPath%>');//진행률 표시줄 시작
사실을 반환;
}
</script>
</head>
<본문>
<form name="frmUpload" method="post" action="Example.asp" enctype="multipart/form-data" onSubmit="return chkFrm()">
일반 형식:<BR><input type="text" name="normalForm" size="40"><BR><BR>
파일 1:<BR>
<input type="file" name="file1" size="40"></br>
<input type="text" name="fileDesc1" size="30"><BR><BR>
파일 2:<BR>
<input type="file" name="file2" size="40"></br>
<input type="text" name="fileDesc2" size="30"><BR>
파일 3:<BR>
<input type="file" name="file3" size="40"></br>
파일 4:<BR>
<input type="file" name="file4" size="40"></br>
파일 5:<BR>
<input type="file" name="file5" size="40"></br>
<input type="submit" name="btnSubmit" value="submit"/>
</form>
</body>
</html>
SundyUpload.asp
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<%
DimSundyUpload_SourceData
ClassSundy업로드
Dim objForm,objFile,Version,objProgress
희미한 xmlPath,CharsetEncoding
공개 함수 형식(strForm)
strForm=lcase(strForm)
objForm.exists(strForm)이 아닌 경우
양식=""
또 다른
양식=objForm(strForm)
종료 조건
함수 종료
공용 함수 파일(strFile)
strFile=lcase(str파일)
objFile.exists(strFile)가 아닌 경우
파일 설정=새 FileInfo
또 다른
파일=objFile(strFile) 설정
종료 조건
기능 종료
공개 하위 UploadInit(progressXmlPath,charset)
Dim RequestData,sStart,Crlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile
희미한 iFileSize,sFilePath,sFileType,sFormValue,sFileName
희미한 iFindStart,iFindEnd
희미한 iFormStart,iFormEnd,sFormName
Version="업로드 너비 진행률 표시줄 버전 1.0"
설정 objForm=Server.CreateObject("Scripting.Dictionary")
설정 objFile=Server.CreateObject("Scripting.Dictionary")
Request.TotalBytes<1인 경우 Sub를 종료합니다.
tStream = Server.CreateObject("adodb.stream") 설정
SundyUpload_SourceData = Server.CreateObject("adodb.stream") 설정
SundyUpload_SourceData.Type = 1
SundyUpload_SourceData.Mode =3
SundyUpload_SourceData.Open
DimTotalBytes
희미한 청크읽기 크기
희미한 DataPart, PartSize
희미한 객체진행
TotalBytes = Request.TotalBytes '전체 크기
ChunkReadSize = 64 * 1024 ' 청크 크기 64K
바이트읽기 = 0
xmlPath = 진행XmlPath
CharsetEncoding = 문자셋
CharsetEncoding = ""인 경우
CharsetEncoding = "utf-8"
종료 조건
objProgress = 새 진행 설정
objProgress.ProgressInit(xmlPath)
objProgress.UpdateProgress 총 바이트 수,0
'루프 블록 읽기
BytesRead < TotalBytes 동안 수행
'청크 단위로 읽기
PartSize = ChunkReadSize
PartSize + BytesRead > TotalBytes인 경우 PartSize = TotalBytes - BytesRead
DataPart = Request.BinaryRead(PartSize)
BytesRead = BytesRead + PartSize
SundyUpload_SourceData.Write DataPart
objProgress.UpdateProgress 총 바이트, 바이트 읽기
고리
'SundyUpload_SourceData.Write Request.BinaryRead(Request.TotalBytes)
SundyUpload_SourceData.Position=0
RequestData =SundyUpload_SourceData.Read
iFormStart=1
iFormEnd = LenB(요청 데이터)
Crlf = chrB(13) & chrB(10)
sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,Crlf)-1)
iStart = LenB(sStart)
iFormStart=iFormStart+iStart+1
동안(iFormStart + 10) < iFormEnd
iInfoEnd = InStrB(iFormStart,RequestData,Crlf & Crlf)+3
tStream.Type = 1
tStream.Mode =3
tStream.Open
SundyUpload_SourceData.Position = iFormStart
SundyUpload_SourceData.CopyTo tStream,iInfoEnd-iFormStart
tStream.위치 = 0
tStream.Type = 2
tStream.Charset =CharsetEncoding
sInfo = tStream.ReadText
tStream.Close
'양식 항목 이름 가져오기
iFormStart = InStrB(iInfoEnd,RequestData,sStart)
iFindStart = InStr(22,sInfo,"name=""",1)+6
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))
'파일이라면
InStr (45,sInfo,"filename=""",1) > 0이면
theFile=new FileInfo를 설정합니다.
'파일명을 알아내세요
iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10
iFindEnd = InStr(iFindStart,sInfo,"""",1)
sFileName = Mid(sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileName=getFileName(s파일이름)
theFile.FilePath=getFilePath(s파일 이름)
'파일 형식 가져오기
iFindStart = InStr(iFindEnd,sInfo,"콘텐츠 유형: ",1)+14
iFindEnd = InStr(iFindStart,sInfo,vbCr)
theFile.FileType =Mid(sinfo,iFindStart,iFindEnd-iFindStart)
theFile.FileStart=iInfoEnd
theFile.FileSize = iFormStart -iInfoEnd -3
theFile.FormName=sFormName
objFile.Exists(sFormName)이 아닌 경우
objFile.add sFormName,theFile
종료 조건
또 다른
'양식 항목인 경우
tStream.Type =1
tStream.Mode =3
tStream.Open
SundyUpload_SourceData.Position = iInfoEnd
SundyUpload_SourceData.CopyTo tStream,iFormStart-iInfoEnd-3
tStream.위치 = 0
tStream.Type = 2
tStream.Charset = CharsetEncoding
sFormValue = tStream.ReadText
tStream.Close
만약 objForm.Exists(sFormName) 그렇다면
objForm(sFormName)=objForm(sFormName)&", "&sFormValue
또 다른
objForm.sFormName,sFormValue 추가
종료 조건
종료 조건
iFormStart=iFormStart+iStart+1
향하게 하다
요청데이터=""
tStream = 없음으로 설정
서브 끝
비공개 하위 클래스_초기화
서브 끝
비공개 하위 클래스_종료
Request.TotalBytes>0인 경우
objForm.RemoveAll
objFile.RemoveAll
objForm=아무것도 설정하지 않음
objFile=아무것도 설정하지 않음
SundyUpload_SourceData.Close
SundyUpload_SourceData = 없음 설정
종료 조건
objProgress = 없음 설정
objFso = Server.CreateObject("Scripting.FileSystemObject") 설정
objFso.FileExists(xmlPath)인 경우
objFso.DeleteFile(xmlPath)
종료 조건
objFso = 아무것도 설정하지 않음
서브 끝
개인 함수 GetFilePath(FullPath)
FullPath <> ""인 경우
GetFilePath = left(FullPath,InStrRev(FullPath, ""))
또 다른
GetFilePath = ""
종료 조건
기능 종료
개인 함수 GetFileName(FullPath)
FullPath <> ""인 경우
GetFileName = mid(FullPath,InStrRev(FullPath, "")+1)
또 다른
GetFileName = ""
종료 조건
기능 종료
클래스 종료
클래스 FileInfo
희미한 양식 이름, 파일 이름, 파일 경로, 파일 크기, 파일 유형, 파일 시작
비공개 하위 클래스_초기화
파일명 = ""
파일 경로 = ""
파일 크기 = 0
파일시작= 0
양식 이름 = ""
파일 유형 = ""
서브 끝
공용 함수 SaveAs(FullPath)
희미한 박사,ErrorChar,i
다른 이름으로 저장=참
'응답.전체 경로 쓰기 & "........................<br>"
'파일이름="ss.txt"
Trim(fullpath)="" 또는 FileStart=0 또는 fileName="" 또는 right(fullpath,1)="/"인 경우 함수 종료
'응답.쓰기 "2............<br>"
dr=CreateObject("Adodb.Stream") 설정
dr.모드=3
dr.유형=1
닥터오픈
SundyUpload_SourceData.position=FileStart
SundyUpload_SourceData.copyto dr,FileSize
dr.SaveToFile FullPath,2
dr.닫기
dr=아무것도 설정하지 않음
다른 이름으로 저장=거짓
기능 종료
수업 종료
수업 진행
희미한 objDom,xmlPath
희미한 시작 시간
비공개 하위 클래스_초기화
종료 하위
공개 하위 ProgressInit(xmlPathTmp)
희미한 objRoot,objChild
희미한 objPI
xmlPath = xmlPathTmp
objDom = Server.CreateObject("Microsoft.XMLDOM") 설정
objRoot = objDom.createElement("진행") 설정
objDom.appendChild objRoot
objChild = objDom.createElement("totalbytes") 설정
objChild.Text = "0"
objRoot.appendChild objChild
objChild = objDom.createElement("uploadbytes") 설정
objChild.Text = "0"
objRoot.appendChild objChild
objChild = objDom.createElement("uploadpercent") 설정
objChild.Text = "0%"
objRoot.appendChild objChild
objChild = objDom.createElement("uploadspeed") 설정
objChild.Text = "0"
objRoot.appendChild objChild
objChild = objDom.createElement("totaltime") 설정
objChild.Text = "00:00:00"
objRoot.appendChild objChild
objChild = objDom.createElement("lefttime") 설정
objChild.Text = "00:00:00"
objRoot.appendChild objChild
objPI 설정 = objDom.createProcessingInstruction("xml","version='1.0' 인코딩='utf-8'")
objDom.insertobjPI 이전, objDom.childNodes(0)
objDom.xmlPath 저장
objPI = 없음 설정
objChild = 없음으로 설정
objRoot = 없음으로 설정
objDom = 아무것도 설정하지 않음
서브 끝
하위 업데이트진행(tBytes,rBytes)
희미한 시간, 현재 시간, 속도, 총 시간, 왼쪽 시간, 백분율
rBytes = 0이면
startTime = 타이머
objDom = Server.CreateObject("Microsoft.XMLDOM") 설정
objDom.load(xmlPath)
objDom.selectsinglenode("//totalbytes").text=tBytes
objDom.save(xmlPath)
또 다른
속도 = 0.0001
currentTime = 타이머
eTime = 현재 시간 - 시작 시간
eTime>0이면 속도 = rBytes / eTime
totalTime = t바이트/속도
leftTime = (tBytes - rBytes) / 속도
퍼센트 = 라운드(rBytes *100 / tBytes)
'objDom.selectsinglenode("//uploadbytes").text = rBytes
'objDom.selectsinglenode("//uploadspeed").text = 속도
'objDom.selectsinglenode("//totaltime").text = 총시간
'objDom.selectsinglenode("//lefttime").text = leftTime
objDom.selectsinglenode("//uploadbytes").text = FormatFileSize(rBytes) & " / " & FormatFileSize(tBytes)
objDom.selectsinglenode("//uploadpercent").text = 백분율
objDom.selectsinglenode("//uploadspeed").text = FormatFileSize(속도) & "/sec"
objDom.selectsinglenode("//totaltime").text = SecToTime(totalTime)
objDom.selectsinglenode("//lefttime").text = SecToTime(leftTime)
objDom.save(xmlPath)
종료 조건
End Sub
개인 함수 SecToTime(초)
희미한 h:h = "0"
희미한 m:m = "0"
희미한 s:s = "0"
h = 라운드(초/3600)
m = round((초 모드 3600) / 60)
s = 라운드(초 mod 60)
LEN(h)=1이면 h = "0" & h
LEN(m)=1이면 m = "0" & m
LEN(s)=1이면 s = "0" & s
SecToTime = (h & ":" & m & ":" & s)
기능 종료
개인 함수 FormatFileSize(fsize)
희미한 라디오,k,m,g,unitTMP
k = 1024
m = 1024*1024
지 = 1024*1024*1024
라디오=1
Fix(fsize / g) > 0.0이면
단위TMP = "GB"
라디오=g
ElseIf Fix(fsize / m) > 0 Then
단위TMP = "MB"
라디오=m
ElseIf Fix(fsize / k) > 0 Then
단위TMP = "KB"
라디오=k
또 다른
단위TMP = "B"
라디오=1
종료 조건
라디오 = 1이면
FormatFileSize = fsize & " "
또 다른
FormatFileSize = FormatNumber(fsize/radio,3) & unitTMP
종료 조건
종료 함수
Private Sub Class_Terminate
objDom = 아무것도 설정하지 않음
서브 끝
수업 종료
'http://www.knowsky.com/
%>
<스크립트 언어="자바스크립트">
//진행률 표시줄 시작
함수 startProgress(xmlPath){
디스플레이진행();
setProgressDivPos();
setTimeout("DisplayProgressBar('" + xmlPath + "')",500);
}
함수 DisplayProgressBar(xmlPath){
var xmlDoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
xmlDoc.async = 거짓;
xmlDoc.load(xmlPath);
if (xmlDoc.parseError.errorCode!=0){
var 오류 = xmlDoc.parseError;
경고(오류.이유)
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
반품;
}
var root = xmlDoc.documentElement; //루트 노드
var totalbytes = root.childNodes(0).text;
var uploadbytes = root.childNodes(1).text;
var 퍼센트 = root.childNodes(2).text;
ProgressPercent.innerHTML = 퍼센트 + "%";
ProgressBar.style.width = 퍼센트 + "%";
uploadSize.innerHTML = 업로드바이트;
uploadSpeed.innerHTML = root.childNodes(3).text;
totalTime.innerHTML = root.childNodes(4).text;
leftTime.innerHTML = root.childNodes(5).text;
if (퍼센트<100){
setTimeout("DisplayProgressBar('" + xmlPath + "')",1000);
}
}
함수 디스플레이프로그레스(){
var objProgress = document.getElementById("진행");
objProgress.style.display = "";
}
함수 closeProgress(){
var objProgress = document.getElementById("진행");
objProgress.style.display = "없음";
}
함수 setProgressDivPos(){
var objProgress = document.getElementById("진행");
objProgress.style.top = document.body.scrollTop+(document.body.clientHeight-document.getElementById("Progress").offsetHeight)/2
objProgress.style.left = document.body.scrollLeft+(document.body.clientWidth-document.getElementById("Progress").offsetWidth)/2;
}
</script>
<스타일 유형="텍스트/css">
.진전 {
위치: 절대;
패딩: 4px;
상단: 50;
왼쪽: 400;
글꼴 모음: Verdana, Helvetica, Arial, sans-serif;
글꼴 크기: 12px;
너비: 250px;
높이:100px;
배경: #FFFFD1;
색상: #3D2C05;
테두리: 1px 솔리드 #715208;
/* Mozilla 독점 */
-moz-국경-반경: 5px;
/*-모즈-불투명도: 0.95 */
}
.진행 테이블,.진행 td{
글꼴 크기:9pt;
}
.술집{
너비:100%;
높이:15px;
배경색:#CCCCCC;
테두리: 1px 삽입 #666666;
여백 하단:4px;
}
.ProgressPercent{
글꼴 크기: 9pt;
색상: #000000;
높이: 15px;
위치: 절대;
Z-지수: 20;
너비: 100%;
텍스트 정렬: 중앙;
}
.진행률 표시줄{
배경색:#91D65C;
너비:1px;
높이:15px;
}
</style>
<div id="진행" style="display:none 클래스="진행">"
<div 클래스="바">
<div id="ProgressPercent" class="ProgressPercent">0%</div>
<div id="ProgressBar" class="ProgressBar"></div>
</div>
<table border="0" cellpacing="0" cellpadding="2">
<tr>
<td>업로드됨</td>
<td>:</td>
<td id="uploadSize"></td>
</tr>
<tr>
<td>업로드 속도</td>
<td>:</td>
<td id="uploadSpeed"> </td>
</tr>
<tr>
<td>총 소요시간</td>
<td>:</td>
<td id="totalTime"> </td>
</tr>
<tr>
<td>남은 시간</td>
<td>:</td>
<td id="leftTime"> </td>
</tr>
</table>
</div>
http://blog.csdn.net/delinsql/archive/2006/12/29/1467430.aspx