컴퓨터 지식 네트워크 - 컴퓨터 소프트웨어 - 사진을 저장하는 필드가 있는 데이터 테이블을 만들었습니다. 이 필드의 유형은 바이너리입니다.

사진을 저장하는 필드가 있는 데이터 테이블을 만들었습니다. 이 필드의 유형은 바이너리입니다.

다양한 질문 중

가장 일반적인 문제는 서버에 파일을 업로드하는 방법, 특히 사진을 업로드하는 방법에 관한 것 같습니다. NetEase Virtual Community에서 제공하는 "Daily One Star" 기능은 네티즌들이 사진을 업로드할 수 있는 기능을 제공합니다. 이미지 파일을 서버에 업로드하려면 다양한 무료 파일 업로드 구성 요소를 사용할 수 있습니다. 매우 강력하지만 대부분의 경우 무료 ASP 지원 공간만 사용하거나 다른 사람의 가상 공간을 임대할 수 있습니다. 두 번째 경우에는 파일 업로드 구성 요소를 사용하는 것이 불가능하며 많은 "돈"을 지불해야 합니다. 자체 가상 호스트가 없으면 서버에 필요한 구성 요소를 쉽게 설치할 수 있습니다. 이러한 상황은 대부분의 사람들에게 적합하지 않습니다. 그러면 우리가 할 수 있는 일은 아무것도 없나요? 하하, 대답은 '예'입니다. (물론 그렇습니다. 그렇지 않으면 이 글을 쓸 수 없을 것입니다.) 순수 ASP 코드를 사용하여 이미지를 업로드하고 데이터베이스에 저장하는 기능을 구현해 보겠습니다(그런데 웹 페이지의 데이터베이스에 이미지를 표시하는 기능도 구현합니다).

먼저 우리가 사용할 객체 메소드에 대해 알아봅시다. 일반적으로 이전 페이지에서 전달된 데이터를 얻기 위해 Request 객체를 사용합니다. 마찬가지로 Request 개체를 사용하여 Request.BinaryRead() 메서드를 사용하여 업로드된 파일 데이터를 얻을 수도 있습니다. 데이터베이스에서 이미지 데이터를 읽어 웹 페이지에 표시하는 데 필요한 방법은

Request.BinaryWrite()입니다. 이미지 데이터를 가져와서 데이터베이스에 저장할 때는 Insert 문을 직접 사용하여 데이터베이스를 조작할 수 없으며 대신 ADO의 AppendChunk 메서드를 사용해야 합니다. GetChunk.메소드. 각 메소드의 구체적인 구문은 다음과 같습니다:

* Request.BinaryRead 구문:

variant = Request.BinaryRead(count)

매개변수

변형

반환 값은 클라이언트에서 읽은 데이터를 보유합니다.

count

클라이언트에서 읽을 데이터의 양을 나타냅니다. 이 값은

메소드를 사용하여 얻은 데이터의 양보다 작거나 같습니다. 요청.총바이트.

* Request.BinaryWrite 구문:

Request.BinaryWrite 데이터

매개변수

데이터

작성될 클라이언트 브라우저에 패킷을 보냅니다.

* Request.TotalBytes 구문:

variant = Request.TotalBytes

매개변수

variant

Return from 클라이언트가 읽은 데이터의 바이트 수입니다.

* AppendChunk 구문

큰 텍스트, 이진 데이터 필드 또는 매개변수 쌍에 데이터를 추가하시겠습니까?

object.AppendChunk 데이터

매개변수

객체 필드 또는 매개변수 객체

객체에 추가된 데이터를 포함하는 데이터 변형 유형입니다.

설명

Field 또는 Parameter 개체의 AppendChunk 메서드를 사용하여 긴 바이너리 또는 문자 데이터를 개체에 채웁니다. 시스템 메모리가 제한된 경우 AppendChunk 메서드를 사용하여 긴 값에 대한 전체가 아닌 일부 작업을 수행할 수 있습니다.

* GetChunk 구문

큰 텍스트 또는 이진 데이터 필드 개체의 내용 전체 또는 일부를 반환합니다.

variable = field.GetChunk( Size )

반환 값

변형 유형을 반환합니다.

매개변수

검색할 바이트 또는 문자 수와 동일한 긴 정수 표현식의 크기입니다.

설명

Field 개체의 GetChunk 메서드를 사용하여 긴 바이너리 또는 문자 데이터의 일부 또는 전부를 검색합니다. 시스템 메모리가 제한된 경우 GetChunk 메서드를 사용하여 전체가 아닌 일부 긴 값을 처리할 수 있습니다.

GetChunk 호출에서 반환된 데이터는 "변수"에 할당됩니다. Size가 나머지 데이터보다 큰 경우

GetChunk는 "변수"를 공백으로 채우지 않고 나머지 데이터만 반환합니다.

필드가 비어 있으면

GetChunk 메서드는 Null을 반환합니다.

각 후속 GetChunk 호출은 이전 GetChunk 호출이 중단된 지점부터 데이터를 검색합니다. 그러나 한 필드에서 데이터를 검색한 다음 현재 레코드의 다른 필드 값을 설정하거나 읽는 경우 ADO는 데이터가 첫 번째 필드에서 검색되었다고 가정합니다. GetChunk 메서드가 첫 번째 필드에서 다시 호출되면 ADO는 호출을 새로운 GetChunk 작업으로 해석하고 레코드의 시작 부분부터 읽기 시작합니다. 다른 Recordset 개체가 첫 번째 Recordset 개체의 복사본이 아닌 경우 해당 개체의 필드에 액세스해도 GetChunk 작업이 중단되지 않습니다. Field 개체의 Attributes 속성에 있는 adFldLong 비트가 True로 설정된 경우 해당 필드에서 GetChunk 메서드를 사용할 수 있습니다. Field 개체에서 Getchunk 메서드를 사용할 때 현재 레코드가 없으면 오류 3021(현재 레코드 없음)이 생성됩니다. 다음으로, 테스트로 데이터베이스 구조를 다음과 같이 설계하겠습니다(Access97):

필드 이름 유형 설명

id 자동 번호 지정 기본 키 값

p>

p>

img OLE 개체는 이미지 데이터를 저장하는 데 사용됩니다.

MS SQL Server7의 경우 해당 구조는 다음과 같습니다.

필드 이름 유형 설명

id int (Identity) 기본 키 값

img 이미지는 이미지 데이터를 저장하는 데 사용됩니다.

이제 순수 ASP 코드 업로드 부분을 공식적으로 작성하기 시작합니다. 첫째, 업로드 인터페이스를 통해 사용자는 업로드할 이미지를 선택할 수 있습니다. 코드는 다음과 같습니다

(upload.htm):

<;body>

action="process.asp" method=post>

<입력 유형 =파일 이름 =mefile>

코드의 검은색 기울임꼴 부분에 주의하세요. 이 속성은 양식에 있어야 합니다. , 데이터가 업로드되지 않습니다.

다음으로 process.asp의 브라우저에서 얻은 데이터에 대해 필요한 처리를 수행해야 합니다. 왜냐하면 process.asp에서 얻은 데이터에는 원하는 업로드뿐만 아니라 업로드된 이미지 데이터에도 포함되어 있기 때문입니다. 불필요한 정보를 제거하고 처리된 이미지 데이터를 데이터베이스에 저장해야 합니다. 여기서는 Access97을 예로 들어 보겠습니다.

구체적인 코드는 다음과 같습니다(process.asp):

<%

response.buffer=true

formsize=request.totalbytes

formdata =request.binaryread(formsize)

bncrlf=chrB(13) & chrB(10)

divider=leftB(formdata,clng(instrb(formdata,bncrlf)) -1)

datastart=instrb(formdata,bncrlf & bncrlf)+4

dataend=instrb(datastart+1,formdata,divider)-datastart

mydata=midb (formdata,datastart,dataend)

set connGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver=;DBQ=" &

server.MapPath("images.mdb") & ";uid=;PWD=;"

connGraph.Open

set rec=server.createobject( "ADODB.recordset")

rec.Open "SELECT * FROM [images] where id is null",connGraph,1,3

rec.addnew

rec( "img").appendchunk mydata

rec.update

rec.close

set rec=nothing

set connGraph =nothing

%>

좋아, 이제 업로드된 사진을 Images.mdb라는 데이터베이스에 저장했습니다. 남은 작업은 사진을 데이터베이스에 저장하는 것입니다. 데이터가 표시됩니다. 웹 페이지에서. 일반적으로 HTML에서는 이미지를 표시하기 위해 태그, 즉 를 사용하는데, 우리의 이미지는 데이터베이스에 저장됩니다. 하하, 실제로 경로를 지정하는 것 외에도 이 SRC 속성은 다음과 같이 사용할 수도 있습니다:

따라서 우리가 해야 할 일은 showimg.asp의 데이터베이스에서 정규화된 데이터를 읽고 이를 SRC 속성에 반환하는 것입니다. 구체적인 코드는 다음과 같습니다(showimg.asp).

<%

connGraph=server.CreateObject("ADODB.connection")

connGraph.ConnectionString="driver=;DBQ=" &

서버를 설정합니다. MapPath("images.mdb" ) & ";uid=;PWD=;"

connGraph.Open

set rec=server.createobject("ADODB.recordset")

p>

strsql= "id=" & Trim(request("id"))인 이미지에서 img를 선택하세요.

rec.open strsql,connGraph,1,1

Response.ContentType = "image/ *"

Response.BinaryWrite rec("img").getChunk(7500000)

rec.close

set rec= 아무것도

set connGraph=nothing

%>

브라우저에 출력하기 전에 Response.ContentType = "image/*"를 지정해야 합니다. 이미지가 정상적으로 표시될 수 있습니다.

마지막으로 주의할 점은 내 process.asp의 처리에서는 잠깐, 이러한 항목이 있으면 process.asp는 불필요한 데이터 처리에 주의해야 합니다. 사실, 사진을 업로드하고 데이터베이스에 저장하는 것은 매우 간단합니다. 이렇게 하면 더 이상 자신의 공간에서 다양한 업로드 구성 요소를 사용할 수 없을까 걱정할 필요가 없습니다. 당신은 무엇을 기다리고 있습니까? 지금 시도해 보세요.

上篇: 내 컴퓨터의 모니터를 교체합니다. 너의 책상 위에 있는 물건은 아직 있니? 下篇: 루 마스터의 수백만 개의 러닝 스코어를 컴퓨터 게임 콘솔에 장착하고 싶은데 좋은 구성 목록이 있나요?
관련 내용