การทำไฟล์จากเบราว์เซอร์เป็นวิธีง่ายๆในการส่งไฟล์จากไคลเอนต์ไปยังเซิร์ฟเวอร์ จากเบราว์เซอร์รุ่นที่สาม Netscape และ Microsoft เบราว์เซอร์ส่วนใหญ่สามารถอัปโหลดไฟล์จากเซิร์ฟเวอร์ได้โดยไม่จำเป็นต้องให้วิธีการเข้าถึงหรือซอฟต์แวร์พิเศษแก่ผู้ใช้
ส่วนประกอบ ASP บางส่วนได้รับการออกแบบสำหรับไฟล์ตัวอย่างเช่น ::
ตัวรับโพสต์
(ส่วนหนึ่งของ Microsoft SiteServer)
ASPSMARTUPLOAD (Advantys),
Aspupload (ยังคงอยู่)
Sa-Fileupsoftware Artisants)
จุดเริ่มต้นของบทความนี้จะบอกข้อมูลเกี่ยวกับการสร้างส่วนประกอบดังกล่าวและส่วนประกอบเหล่านี้มักจะใช้ VB, C ++ หรือ Java
ปัญหาของส่วนประกอบเหล่านี้คือพวกเขาเป็นส่วนหนึ่งของผลิตภัณฑ์ที่สามมากกว่า ASP มาตรฐาน เป็นส่วนประกอบที่สาม -Party การติดตั้งจะต้องติดตั้งบนเซิร์ฟเวอร์ ซึ่งหมายความว่า DLL จะต้องคัดลอกและลงทะเบียนบนเซิร์ฟเวอร์ ระบบโฮสติ้งส่วนใหญ่ไม่ได้รับอนุญาตให้ทำการตั้งค่าดังกล่าวบนเซิร์ฟเวอร์ของพวกเขาเนื่องจากปัญหาการกำหนดค่า (โดยเฉพาะโฮสต์เสมือนจริง) อาจเกิดขึ้น ข้อเสียครั้งที่สองคือส่วนใหญ่ไม่ได้ฟรี
ดังนั้นฉันต้องเขียนรหัส VBScript เพื่อแก้ปัญหาการอัปโหลดไฟล์ นี่ไม่ใช่ตัวเลือกที่หลีกเลี่ยงไม่ได้เนื่องจาก VBScript เป็นภาษาสคริปต์ซึ่งสามารถใช้ประเภทข้อมูลตัวแปรเท่านั้นและไม่สามารถให้ฟังก์ชั่นที่สร้างขึ้นได้จำนวนมากในการจัดการข้อมูลไบนารีและอาร์เรย์ไบต์
เพื่อทำความเข้าใจกระบวนการอัพโหลดเราต้องรู้ก่อนว่าข้อมูลจะถูกส่งจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์ด้วยโปรโตคอล HTTP ซึ่งหมายความว่าการส่งแบบฟอร์มของ "multipart/form-data" (Multi-Part/Format-Data) ถูกส่ง
แบบฟอร์มอัปโหลด
ภายใต้สถานการณ์ปกติให้ใช้แบบฟอร์ม HTML เพื่อส่งข้อมูลจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์ แบบฟอร์มนี้อาจมีโดเมนข้อความกล่องตรวจสอบปุ่มและประเภทการควบคุมประเภทไฟล์ของไฟล์ที่อัปโหลด ผู้ใช้กรอกและส่งตารางนี้ไปยังเซิร์ฟเวอร์ด้วยข้อมูลของเขาเอง
แอตทริบิวต์ enableype ในองค์ประกอบตารางระบุประเภทเนื้อหาที่เข้ารหัสโดยชุดข้อมูลตารางที่เข้ารหัสไปยังเซิร์ฟเวอร์ ค่าเริ่มต้นของแอตทริบิวต์ Enctype คือ "Application/X-WWW-FORM-URLENCODED" แต่เมื่อส่งข้อความจำนวนมากไปยังเซิร์ฟเวอร์รวมถึงข้อมูลที่มีอักขระที่ไม่ใช่ ASCII หรือหมายเลขไบนารีประเภทเริ่มต้นนี้ไม่สามารถทำได้ ในเวลานี้ควรใช้ประเภทเนื้อหา "multipart/form-data" เมื่อไฟล์อัปโหลดแบบฟอร์ม
ข้อมูล "Multipart/Form-Data" มีชุดของส่วนประกอบ
หัวการกระจายเนื้อหาค่าของ "ฟอร์ม-ข้อมูล";
สำหรับการควบคุมประเภทไฟล์ส่วนหนึ่งอาจมีข้อมูลเพิ่มเติม:
แอตทริบิวต์ชื่อไฟล์ (ชื่อไฟล์) ของพา ธ ดั้งเดิมและชื่อไฟล์ถูกกำหนดไว้บนไคลเอนต์
ติดตามเนื้อหาไบนารีควบคุมหรือข้อความที่อยู่เบื้องหลังหัวเหล่านี้
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการเข้ารหัสของ "Multipart/Form-Data"
หากส่งแบบฟอร์มนี้คุณสามารถอ่านคำขอเหล่านี้บนเซิร์ฟเวอร์:
------------------------- 7CF87224D2020A
เนื้อหา--ฟอร์ม: ชื่อ; ชื่อ = "อีเมล"
[อีเมลป้องกัน]
------------------------- 7CF87224D2020A
เนื้อหา--ฟอร์ม: ชื่อ;
ประเภทเนื้อหา: image/pjpeg
------------------------- 7CF87224D2020A
เนื้อหา--ฟอร์ม: ชื่อ; ชื่อ = "ป้อน"
ส่งแบบสอบถาม
----------------------------- 7CF87224D2020A--
เมื่อเนื้อหานั้นถูกส่งเป็นการตอบสนองต่อไคลเอนต์มันจะปรากฏขึ้น request.binaryRead และ Response.BinaryWrite วิธีการอ่านและเขียนข้อมูลไบนารี
< / เปอร์เซ็นต์
Response.binaryWrite (request.binaryRead (request.totalbytes)))
-
คุณสามารถเห็นการแบ่งของแต่ละส่วนของการตอบสนอง:
------------------------- 7CF87224D2020A
เส้นขอบเขตสุดท้ายตามมา ' -'
การควบคุมแต่ละครั้งมีการแยกเนื้อหา การจดจำแอตทริบิวต์ชื่อถูกควบคุมโดยตาราง HTML (อีเมล, หยดและ Enter สำหรับการควบคุมประเภทไฟล์ (Blob)
ชื่อไฟล์ยังเป็นส่วนหนึ่งของส่วนหัวส่วนหัวและส่วนหัวประเภทเนื้อหาให้ข้อมูลประเภทของข้อมูลไบนารี
สคริปต์ที่อัปโหลด
เนื้อหาทั้งหมดข้างต้นจะต้องเชื่อมโยง สิ่งนี้ชัดเจนมากใน VB หรือ C ++ เนื่องจากมีวัตถุและวิธีการมากมายสำหรับสิ่งนี้ ใน VBScript ต้องใช้ฟังก์ชั่นบางอย่างที่ให้ไว้โดยภาษาและปัญหาของสตริงตัวแปรที่เข้ารหัสแบบคู่ -ไบต์ที่ใช้ใน VBScript ต้องได้รับการแก้ไข
ฟังก์ชัน vbscript
ข้อมูลต้นฉบับเป็นรูปแบบไบนารีดังนั้นฟังก์ชัน VBScript ที่ออกแบบมาสำหรับการจัดการข้อมูลไบนารีจะต้องใช้ เพราะเราพิจารณาข้อมูลต้นฉบับเป็นสายของไบต์, MIDB, InstrB และฟังก์ชั่น Lenb นั้นมีประโยชน์ แต่หลีกเลี่ยงสตริงคลาสสิกของ VBScript เพราะเป็นสตริงคู่ -byte -encoded ซึ่งไม่เหมาะที่จะย่อยสลายเป็นไบต์เดียว
เหล่านี้เป็นฟังก์ชั่นเดียวที่ใช้ในการย่อยสลายไบต์ในฟังก์ชัน VBScript ต้องใช้วิธีการเพื่อให้ได้สตริงที่เข้ารหัสแบบคู่ -ไบต์จากข้อมูลที่สลายตัวเพื่อให้คุณสามารถใช้สตริงในการเข้ารหัส VBScript ในการใช้สตริงเป็นตัวแปรอิสระใน InstrB จำเป็นต้องใช้ฟังก์ชันเพื่อแปลงสตริงคู่ -BYTE เป็นสตริง -BYTE เดี่ยว
สำหรับฉันฉันเขียนฟังก์ชั่นสองฟังก์ชั่นคือ getString () และ getByTestring () จากนั้นอธิบายในภายหลัง
โครงสร้าง
ข้อมูลที่ย่อยสลายจะถูกเก็บไว้ในวัตถุพจนานุกรม VBScript วัตถุพจนานุกรมคือวัตถุตารางแฮชซึ่งเก็บ (คีย์รายการ) มันเป็นส่วนหนึ่งของ VBScript และ ASP2.0
กำหนดวัตถุพจนานุกรมแรก "UploadRequest" วัตถุนี้มีการควบคุมทั้งหมดที่ส่งโดยตารางการอัปโหลด คีย์คือการควบคุมการควบคุมและรายการคือข้อมูลการควบคุมที่มีอยู่ในวัตถุ:
"ControlName1", พจนานุกรมควบคุม 1
"ControlName2", Dictionary Control2
ตัวแทนวัตถุพจนานุกรมที่ควบคุมมีคู่ (คีย์, รายการ) ต่อไปนี้:
"ค่า" สตริงหรือเนื้อหาไบนารี
"ชื่อไฟล์" ชื่อไฟล์ที่อัปโหลด
"ContentType", contentType ของไฟล์ที่อัปโหลด
การรวมสิ่งเหล่านี้มีตัวอย่างต่อไปนี้:
UploadRequest: "อีเมล", UploadControl 1: "value", [อีเมลป้องกัน]
"Blob", UploadControl 2: "Filename", C: /upload/200902/file.gif "ContentType":
รูปภาพ/gif "value": gif89ai?
วัตถุนี้มีประโยชน์มากสำหรับการเข้าถึงในอนาคตและใช้ข้อมูล
ทำลาย
นี่คือรหัสสำหรับการสลายตัวการอ่านและบันทึกการควบคุมการอัปโหลด กระบวนการนี้เสร็จสิ้นด้วยโปรแกรม "builduploadrequest"
sub builduploadRequest (requestbin)
ก่อนอื่นคุณต้องค้นหาเส้นแบ่ง
'รับขอบเขต posbeg = 1 posend = instrb
bou
-