방금 컴포넌트 없이 컴포넌트 업로드를 성공적으로 시도했기 때문에 모든 사람과 공유할 수 있는 코드를 제공합니다.
/* addemployee.asp */
<html>
<머리>
<title>직원 홈</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="../css/site_css.css" type="text/css">
</head>
<스크립트 언어="javascript">
<!--
//카테고리 선택
///////////////////////////////////////////////// /// ////////////////////////
함수 selectsort(txtSubject){
var 반환 값
returnValue=window.showModalDialog("selMode.htm",null,"center:1;status:0;help:0;reised:0;dialogheight:300px;dialogwidth:206px");
if (returnValue!="" && returnValue!=null){
txtSubject.value=returnValue
}
}
///////////////////////////////////////////////// /// ////////////////////////
//적법성 검사
함수 isOK(thisForm){
var strTemp,strValue,strLen,strExName
if(thisForm.txtTitle.value==""){
Alert("팁: 제목은 비워둘 수 없습니다. 정확하게 입력해주세요.")
thisForm.txtTitle.focus()
거짓을 반환하다
}
if(thisForm.txtSort.value==""){
Alert("팁: 올바른 카테고리를 선택하세요")
thisForm.txtSort.focus()
거짓을 반환하다
}
/*이미지 유형 확인*/
if(thisForm.file.value!=""){
strTemp=thisForm.file.value
strValue=strTemp.toLowerCase()
strLen=strTemp.length
strExName=strValue.substring(strLen-4,strLen)
if (strExName!=".jpg" && strExName!=".gif"){
Alert("jpg나 gif 파일을 선택해주세요!")
거짓을 반환하다
}
true를 반환
}
}
//-->
</script>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="1" topmargin="1">
<form name="form1" method="post" action="transact1.asp" enctype="multipart/form-data">
<table border="0" cellpacing="0" cellpadding="0">
<tr>
<td colspan="2" bgcolor="#006699" height="15"> </td>
</tr>
<tr>
<td class="textBlack">
<div align="right">제목:</div>
</td>
<TD>
<input type="text" name="txtTitle" size="52" class="textarea">
</td>
</tr>
<tr>
<td class="textBlack">
<div align="right">카테고리:</div>
</td>
<TD>
<input type="text" name="txtSort" size="35" class="textarea">
<input type="button" name="Submit2" class="buttonSkid" onclick="selectsort(txtSort);">
</td>
</tr>
<tr>
<td class="textBlack" valign="top">
<div align="right">텍스트:</div>
</td>
<TD>
<textarea name="txtContent"row="15" cols="50" class="textarea"></textarea>
</td>
</tr>
<tr>
<td height="14" class="textBlack" valign="top">
<div align="right">사진:</div>
</td>
<td height="14" class="textBlack">
<div 정렬="왼쪽">
<input type="file" name="file" size="35" class="textarea">
</div>
</td>
</tr>
<tr>
<td height="42" class="textBlack" valign="top"> </td>
<td height="42" class="textBlack" valign="middle">
<p>1. 업로드하는 사진의 크기를 <font color="#FF0000"><b>500K</b></font> 이내로 조절하세요. 그렇지 않으면 업로드가 허용되지 않습니다.<br>
2. 업로드하는 이미지는 <font color="#FF0000"><b>150*130픽셀</b></font><br>이어야 합니다.
3. 업로드한 이미지를 JPG 또는 GIF 형식으로 업로드하세요</p>
</td>
</tr>
<tr>
<td height="39" class="textBlack"> </td>
<td height="39" valign="중간">
<div align="center"><img src="../images/save.gif" width="85" height="19" onClick="if(isOK(form1)){form1.submit()}" >
<img src="../images/close.gif" width="85" height="19" onClick="self.close();"
</td>
</tr>
</table>
</form>
</body>
</html>
************************************************** * ***********************
/* transact1.asp*/
<!--#include 파일="../func/conn.inc"-->
<!--#include 파일="../func/fupload.inc"-->
<!--#include 파일="../func/myfunctions.inc"-->
<%
Request.ServerVariables("REQUEST_METHOD") = "POST"인 경우
희미한 필드
희미한 strTitle,strSort,strContent
희미한 rs,sSql
희미한 iMaxid
희미한 strMaxid
희미한 strlen
필드 설정 = GetUpload()
strTitle=BinaryToString(Fields("txtTitle").value)
strSort=BinaryToString(Fields("txtSort").value)
strContent=BinaryToString(Fields("txtContent").value)
strSort=split(trim(strSort),"-")
if instr(1,lcase(Fields("file").FileName),".jpg")=0 및 instr(1,lcase(Fields("file").FileName),".gif")=0 그러면
response.write "<script 언어='javascript'>alert('업로드된 사진은 gif 또는 jpg 형식이어야 합니다.')</script>"
response.write "<script 언어='javascript'>window.location='addemployee.asp';</script>"
응답.끝
if Fields("file").Length>500000이면
종료됩니다
.
response.write "<script 언어='javascript'>alert('500k 이하의 이미지만 업로드할 수 있습니다.');</script>"
response.write "<script 언어='javascript'>window.location='addemployee.asp';</script>"
응답.끝
end if
'/*데이터베이스에 저장*/
if Fields("file").FileName<>"" then
rs=Server.CreateObject("ADODB.Recordset")를 설정합니다.
sSql="ID 설명별로 직원 주문에서 * 선택"
rs.open SQL,CONN,2,2
rs.eof가 아니라면
iMaxid=Clng(rs("id"))+1
strlen=4-len(cstr(iMaxid))
strMaxid=string(strlen,"0") & cstr(iMaxid)
또 다른
strMaxid="0001"
종료하면
rs.addnew
rs("id")=strMaxid
rs("제목")=str제목
rs("정렬")=str정렬(0)
rs("img").AppendChunk 필드("파일").값
rs("content")=quoteChg(strContent)
rs("todate")=날짜()
RS.업데이트
RS.닫기
response.write "<script 언어='javascript'>alert('레코드를 성공적으로 추가했습니다')</script>"
종료하면
종료하면
%>
************************************************ **********************
/*fupload.inc*/
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>
희미한 UploadSizeLimit
'********************************** GetUpload ************ **********************
'.Name 양식 필드의 이름(<Input Name="..." Type="File,...">)
'.ContentDisposition = 양식 필드의 내용-처리
'.FileName = <입력 유형=파일>의 소스 파일 이름
'.ContentType = <입력 유형=파일>에 대한 콘텐츠 유형
'.Value = 소스 필드의 이진 값입니다.
'.Length = 이진 데이터 필드의 Len
함수 GetUpload()
희미한 결과
결과 설정 = 없음
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then '요청 메서드는 "POST"여야 합니다.
희미한 CT, PosB, 경계, 길이, PosE
CT = Request.ServerVariables("HTTP_Content_Type") 'Content-Type 헤더를 읽습니다.
'응답.CT를 작성하세요.
'응용 프로그램/x-www-form-urlencoded
LCase(Left(CT, 19)) = "multipart/form-data"이면 'Content-Type 헤더는 "multipart/form-data"여야 합니다.
'업로드 요청입니다.
'Content-Type 헤더에서 경계와 길이를 가져옵니다.
PosB = InStr(LCase(CT), "boundary=") '경계 찾기
If PosB > 0 Then Boundary = Mid(CT, PosB + 9) '경계를 분리합니다.
Length = CLng(Request.ServerVariables("HTTP_Content_Length")) 'Content-Length 헤더 가져오기
"" & UploadSizeLimit<>""인 경우
UploadSizeLimit = clng(UploadSizeLimit)
길이 > UploadSizeLimit인 경우
'오류 발생 시 다음 재개' 입력 버퍼를 지웁니다.
' response.AddHeader "연결", "닫기"
' 오류 발생 시 0으로 이동
Request.BinaryRead(길이)
Err.Raise 2, "GetUpload", "업로드 크기" & FormatNumber(Length,0) & "B가 " & FormatNumber(UploadSizeLimit,0) & "B" 제한을 초과합니다.
종료 기능
종료하면
end if
If Length > 0 And Boundary <> "" Then '업로드에 필요한 정보가 있습니까?
경계 = "--" 및 경계
희미한 머리, 바이너리
Binary = Request.BinaryRead(Length) '클라이언트에서 바이너리 데이터를 읽습니다.
'바이너리 데이터에서 업로드 필드를 검색합니다.
결과 설정 = SeparateFields(이진, 경계)
Binary = 비어 있음 '변수 지우기
또 다른
Err.Raise 10, "GetUpload", "0 길이 요청."
종료 조건
또 다른
Err.Raise 11, "GetUpload", "파일이 전송되지 않았습니다."
종료 조건
또 다른
Err.Raise 1, "GetUpload", "잘못된 요청 방법."
종료 조건
GetUpload = 결과 설정
종료 기능
'************************************ SeparateFields ************ **********************
'이 함수는 바이너리 데이터에서 업로드 필드를 검색하고 해당 필드를 배열로 반환합니다.
'바이너리는 입력의 모든 원시 바이너리 데이터의 안전한 배열입니다.
기능 분리 필드(바이너리, 경계)
희미한 PosOpenBoundary, PosCloseBoundary, PosEndOfHeader, isLastBoundary
희미한 필드
Boundary = StringToBinary(Boundary)
PosOpenBoundary = InstrB(바이너리, 경계)
PosCloseBoundary = InstrB(PosOpenBoundary + LenB(Boundary), Binary, Boundary, 0)
필드 설정 = CreateObject("Scripting.Dictionary")
동안 수행(PosOpenBoundary > 0 및 PosCloseBoundary > 0 및 isLastBoundary 아님)
'헤더 및 파일/소스 필드 데이터
희미한 HeaderContent, FieldContent
'헤더 필드
희미한 Content_Disposition, FormFieldName, SourceFileName, Content_Type
'도움변수
희미한 필드, TwoCharsAfterEndBoundary
'헤더 끝을 가져옵니다.
PosEndOfHeader = InstrB(PosOpenBoundary + Len(Boundary), Binary, StringToBinary(vbCrLf + vbCrLf))
'필드 헤더를 분리합니다
HeaderContent = MidB(Binary, PosOpenBoundary + LenB(Boundary) + 2, PosEndOfHeader - PosOpenBoundary - LenB(Boundary) - 2)
'필드 내용을 구분합니다.
FieldContent = MidB(Binary, (PosEndOfHeader + 4), PosCloseBoundary - (PosEndOfHeader + 4) - 2)
'헤더에서 헤더 필드를 분리합니다.
GetHeadFields BinaryToString(HeaderContent), Content_Disposition, FormFieldName, SourceFileName, Content_Type
'필드 하나를 생성하고 매개변수 할당
필드 설정 = CreateUploadField()
필드.이름 = FormFieldName
Field.ContentDisposition = Content_Disposition
Field.FilePath = 소스파일이름
Field.FileName = GetFileName(소스파일 이름)
Field.ContentType = Content_Type
Field.Value = FieldContent
Field.Length = LenB(FieldContent)
Fields.Add FormFieldName, Field
'이 끝 경계입니까?
TwoCharsAfterEndBoundary = BinaryToString(MidB(Binary, PosCloseBoundary + LenB(Boundary), 2))
'Binary.Mid(PosCloseBoundary + Len(경계), 2).String
isLastBoundary = TwoCharsAfterEndBoundary = "--"
If Not isLastBoundary Then '이것은 끝 경계가 아닙니다. 다음 양식 필드로 이동합니다.
PosOpenBoundary = PosCloseBoundary
PosCloseBoundary = InStrB(PosOpenBoundary + LenB(경계), 바이너리, 경계 )
종료 조건
고리
SeparateFields = 필드 설정
종료 기능
'************************************ 유틸리티 ************ **********************
함수 BinaryToString(str)
strto = ""
i=1에서 lenb(str)까지
AscB(MidB(str, i, 1)) > 127이면
strto = strto & chr(Ascb(MidB(str, i, 1))*256+Ascb(MidB(str, i+1, 1)))
나는 = 나는 + 1
또 다른
strto = strto & Chr(AscB(MidB(str, i, 1)))
종료하면
다음
BinaryToString=strto
함수 종료
함수 StringToBinary(String)
나는 어둡다,B
I=1에서 len(String)까지
B = B & ChrB(Asc(Mid(문자열,I,1)))
다음
StringToBinary = B
End Function
'업로드 헤더에서 헤더 필드를 분리합니다.
함수 GetHeadFields(ByVal Head, Content_Disposition, Name, FileName, Content_Type)
Content_Disposition = LTrim(SeparateField(Head, "content-disposition:", ";"))
이름 = (SeparateField(Head, "name=", ";")) 'ltrim
If Left(이름, 1) = """" 그러면 Name = Mid(이름, 2, Len(이름) - 2)
FileName = (SeparateField(Head, "filename=", ";")) 'ltrim
If Left(FileName, 1) = """" 그러면 FileName = Mid(FileName, 2, Len(FileName) - 2)
Content_Type = LTrim(SeparateField(Head, "콘텐츠 유형:", ";"))
End 함수
'sStart와 sEnd 사이에 하나의 필드를 구분합니다.
기능 SeparateField(From, ByVal sStart, ByVal sEnd)
희미한 PosB, PosE, sFrom
sFrom = L케이스(From)
PosB = InStr(sFrom, sStart)
PosB > 0이면
PosB = PosB + Len(sStart)
PosE = InStr(PosB, sFrom, sEnd)
PosE = 0이면 PosE = InStr(PosB, sFrom, vbCrLf)
PosE = 0이면 PosE = Len(sFrom) + 1
SeparateField = Mid(시작, PosB, PosE - PosB)
또 다른
SeparateField = 비어 있음
종료 조건
End Function
'파일의 전체 경로에서 파일 이름을 구분합니다.
함수 GetFileName(전체 경로)
딤포스, PosF
PosF = 0
Pos = Len(FullPath)의 경우 1단계 -1
Case Mid 선택(FullPath, Pos, 1)
Case "/", "": PosF = Pos + 1: Pos = 0
선택 종료
다음
PosF = 0이면 PosF = 1
GetFileName = Mid(전체 경로, PosF)
기능 종료
</SCRIPT>
<스크립트 RUNAT=서버 언어=JSCRIPT>
//함수는 Field 객체를 생성합니다.
함수 CreateUploadField(){ 새로운 uf_Init() 반환 }
함수 uf_Init(){
this.이름 = null
this.ContentDisposition = null
this.파일 이름 = null
this.FilePath = null
this.ContentType = null
this.값 = null
this.길이 = null
}
</SCRIPT>