Asp 구성 요소 업로드 진행률 막대 솔루션 없음
" & PostData & "
"'pre, 있는 그대로 출력 형식'RecordSet을 사용하여 바이너리 스트림을 텍스트 Function Binary Tostring(bidata, Size) Const adLong VarChar = 201 Set RS = Create Object("ADODB. Recordset") RS. Fields로 변환합니다.Append "mBinary", adLongVarChar, SizeRS.OpenRS.AddNew RS("mBinary").AppendChunk(biData)RS.UpdateBinaryToString = RS("mBinary").ValueRS.CloseEnd Function%> 가장 간단한 텍스트 파일(G:\homepage.txt, "보옥:http://www.webuc.net";) 텍스트 상자 filename에 기본값인"default filename"을 저장하고 출력 결과를 제출합니다. -------------------7d429871607feContent-Disposition: form-data;name="file1", filename="G:\homepage.txt"Content-Type: text/plain B옥:http://www.webuc.net-----------------------------7d429871607feContent-Disposition: form-data; "filename"default filename----------------------7d429871607fe-는 폼의 항목에 대해 "-------------------------------7d429871607fe"와 같은 경계를 사용하여 한 조각 한 조각 한 조각으로 구분한 것을 알 수 있다. 각 조각의 시작마다 묘사 정보가 있다. 예를 들어Content-Disposition:form-data;name = "filename", 설명 정보에서name = "filename"을 통해 폼 항목의name를 알 수 있습니다.filename = "G:\homepage.txt"라는 내용이 있으면 업로드된 파일이고 업로드된 파일이면 방어수수수수수타령 Content-Type: text/plain으로 파일의 Content-Type을 설명합니다.묘사 정보와 주체 정보 사이는 줄을 바꾸어 구분된다.응, 기본적으로 분명해. 이 규칙에 따라 우리는 데이터를 어떻게 분리하고 분리된 데이터를 처리해야 하는지 알았어. 그런데 하마터면 한 문제를 소홀히 할 뻔했어. 바로 경계치(상례의'--------------------------------7d429871607fe')는 어떻게 알았지?매번 이 경계값을 올릴 때마다 다르지만, 다행히 asp에서 Request를 통과할 수 있습니다.ServerVariables("HTTP CONTENT TYPE")에서 얻을 수 있습니다. 예를 들어 상례에서 HTTPCONTENT_TYPE의 내용은 "multipart/form-data;boundary=-------------------7d429871607fe"입니다. 이 경우 클라이언트의form에서enctype="multipart/form-data"를 사용했는지 판단할 수 있을 뿐만 아니라 경계치boundary=---------------------7d429871607fe도 얻을 수 있습니다.(참고: 여기서 가져온 경계 값은 위의 경계 값보다 시작 부분이 "--"보다 적어 추가하는 것이 좋습니다.)데이터를 어떻게 분석하는지에 대해 나는 더 이상 군말하지 않겠다. 단지 Instr, Mid 등 이런 함수를 빌려 우리가 원하는 데이터를 분리하는 것이다.2. 블록을 나누어 업로드하고 진도를 기록하려면 진도표를 실시간으로 반영해야 한다. 실질적으로 현재 서버가 얼마나 많은 데이터를 얻었는지 실시간으로 알아야 한다.우리가 업로드를 실현한 과정을 다시 한 번 생각해 보자. 우리는 Request를 통해Binary Read(Request.TotalBytes)는 Request 과정에서 현재 서버가 얼마나 많은 데이터를 얻었는지 알 수 없습니다.그래서 융통성 있는 방법을 통해서만 얻을 수 있다. 만약에 우리가 얻은 데이터를 한 덩어리 한 덩어리로 나누고 이미 올린 덩어리 수에 따라 현재 업로드가 얼마나 큰지 계산할 수 있다!즉, 만약에 내가 1K를 1조각으로 한다면 1MB를 올린 입력 흐름은 1024조각으로 나뉘어 얻는다. 예를 들어 내가 현재 100조각을 얻었다면 현재 100K를 올렸다는 뜻이다.내가 블록을 나누자고 했을 때 많은 사람들이 불가사의하다고 느꼈다. 왜냐하면 Binary Read 방법은 지정된 크기를 읽을 수 있을 뿐만 아니라 연속적으로 읽을 수 있기 때문이다.블록 읽기의 무결성을 검증하기 위해 예를 들어 (이 예는 큰 파일을 업로드하지 마십시오. 그렇지 않으면 브라우저가 죽을 수 있습니다): Dim bidata, Post Data, Total Bytes, Chunk Bytes Chunk Bytes = 1 * 1024'블록 크기는 1Ktotal Bytes = Request입니다.TotalBytes'총 크기 PostData = ""에서 텍스트 유형으로 바뀐 데이터 ReadedBytes = 0'을(를) 0'블록으로 초기화하여 Do While ReadedBytes " & PostData & "
"'pre, 있는 그대로 출력 형식'을 사용하여 바이너리 스트림을 텍스트 Function Binary Tostring(bidata, Size) Const adLongVarChar = 201 Set RS = Create Object("ADODB. Recordset") RS. Fields로 변환합니다.Append "mBinary", adLongVarChar, SizeRS.OpenRS.AddNew RS("mBinary").AppendChunk(biData)RS.UpdateBinaryToString = RS("mBinary").ValueRS.CloseEnd Function% > 방금 올린 텍스트 파일을 시험해 본 결과 블록별로 읽은 내용이 완전하다는 것을 증명했고, While 순환에서 우리는 순환할 때마다 현재 상태를 Application에 기록할 수 있으며, 이 Application에 접근해서 동적 업로드 진도표를 얻을 수 있습니다.또한: 상례에서 문자열을 통해 연결한 것으로 바이너리 데이터를 연결하려면ADODB를 통해 연결할 수 있습니다.Stream 대상의 Write 방법, 예시 코드는 다음과 같다.Set bSourceData =createobject("ADODB.Stream")bSourceData.OpenbSourceData.Type = 1 'BinaryDo While ReadedBytes < TotalBytesbiData = Request.BinaryRead(ChunkBytes)bSourceData.Write bidata'는 write 방법을 사용하여 현재 파일 흐름을 bSourceData에 ReadedBytes = ReadedBytes + ChunkBytes If ReadedBytes > TotalBytes Then ReadedBytes = TotalBytes Application ("ReadedBytes") = ReadedBytes Loop 3, 업로드된 파일을 저장하는 Request를 통해 직접 기록합니다.BinaryRead는 제출 데이터를 가져와 업로드 파일을 분리한 후 데이터 유형에 따라 저장 방식이 다르다. 이진 데이터의 경우 ADODB를 통해 직접 저장할 수 있다.바이너리 스트림을 파일로 저장하는 Stream 객체의 SaveToFile 메서드입니다.텍스트 데이터의 경우 TextStream 객체의 Write 방법을 사용하여 텍스트 데이터를 파일에 저장할 수 있습니다.텍스트 데이터와 이진 데이터는 편리하게 서로 변환할 수 있고 작은 파일을 업로드하는 데 있어서 둘은 기본적으로 별 차이가 없다.그러나 두 가지 방식으로 저장할 때 약간의 차이가 있다. ADODB에 대해서는Stream 대상은 모든 데이터를 다 불러와야 파일로 저장할 수 있기 때문에 이런 방식으로 큰 파일을 올리면 메모리를 많이 차지하지만 Text Stream 대상은 파일을 만든 후에 한 번에 Write의 일부분을 여러 번 Write로 나눌 수 있다. 이런 좋은 점은 서버 메모리 공간을 차지하지 않고 위에서 분석한 블록을 결합하여 데이터를 얻는 원리이다.업로드된 데이터를 가져올 때마다 파일에 Write를 넣을 수 있습니다.나는 실험을 한 적이 있다. 마찬가지로 본기에서 200여 MB의 파일을 업로드했는데 첫 번째 방식으로 메모리가 계속 증가했다. 마지막에 컴퓨터의 가상 메모리가 부족하다는 것을 직접 알렸다. 가장 가증스러운 것은 진도표가 파일이 업로드되었다는 것을 나타냈지만 결국 파일은 저장되지 않았다는 것이다.사용 후 한 가지 방법으로 업로드 과정에서 메모리는 기본적으로 아무런 변화가 없다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.