การใช้เทคโนโลยีเว็บเพื่อใช้ระบบการจัดการด้วยโครงสร้าง B/S (เบราว์เซอร์/เซิร์ฟเวอร์) คือแนวโน้มการพัฒนาของระบบอัตโนมัติในสำนักงาน ระบบการจัดการที่ใช้เทคโนโลยีเว็บได้รับการพัฒนาอย่างรวดเร็วในช่วงไม่กี่ปีที่ผ่านมา เนื่องจากมีวงจรการพัฒนาที่สั้น เป็นอิสระจากแพลตฟอร์มผู้ใช้ ง่ายต่อการใช้งานแอปพลิเคชันเชิงโต้ตอบ และสามารถรวบรวม ประมวลผล และเผยแพร่ข้อมูลได้อย่างรวดเร็วและมีประสิทธิภาพ เทคโนโลยี ASP ค่อยๆ กลายเป็นเครื่องมือที่ต้องการสำหรับการพัฒนาระบบการจัดการ เนื่องจากประสิทธิภาพการพัฒนาที่สูง การโต้ตอบที่ดี และความปลอดภัยที่แข็งแกร่ง
แอปพลิเคชั่นบนเว็บจำนวนมากเกี่ยวข้องกับการอัพโหลดไฟล์ เทคโนโลยีการอัพโหลดไฟล์ทั่วไปประกอบด้วย: ขึ้นอยู่กับโปรโตคอล HTTP; ขึ้นอยู่กับองค์ประกอบการอัพโหลดไฟล์ที่พัฒนาโดย VB (หรือ DELPHI และภาษาการเขียนโปรแกรมอื่น ๆ); โดยทั่วไปวิธีการเหล่านี้ต้องการให้โปรแกรมเมอร์เชี่ยวชาญเทคโนโลยีเว็บ เทคโนโลยีฐานข้อมูล หรือเทคโนโลยี CGI หรือเทคโนโลยีส่วนประกอบในเวลาเดียวกัน และมีข้อกำหนดที่สูงกว่าสำหรับโปรแกรมเมอร์ การใช้เทคโนโลยี ASP เพื่อใช้ฟังก์ชันการอัพโหลดไฟล์โดยตรงที่บทความนี้จะแนะนำต้องการเพียงโปรแกรมเมอร์เท่านั้นที่จะเชี่ยวชาญเทคโนโลยี ASP เดียว ซึ่งช่วยลดความยากในการเขียนโปรแกรมได้อย่างมาก
การเปรียบเทียบเทคโนโลยีการอัปโหลดไฟล์ต่างๆ
1. ขึ้นอยู่กับโปรโตคอล HTTP
วิธีการนี้กำหนดให้โปรแกรมเมอร์ต้องใช้ซอฟต์แวร์บุคคลที่สาม เช่น DELPHI, VB ฯลฯ เพื่อดำเนินการเขียนโปรแกรมโปรโตคอล HTTP ในแอปพลิเคชันก่อน จากนั้นจึงจัดแพคเกจเนื้อหาของไฟล์ ที่จะอัพโหลดในรูปแบบของโปรโตคอล HTTP และในที่สุดก็ส่งข้อความขออัพโหลดไปยังเว็บเซิร์ฟเวอร์เพื่อให้ทำการอัพโหลดไฟล์ เนื่องจาก DELPHI และ VB ไม่สามารถเขียนโปรแกรมเครือข่ายเว็บได้อย่างสมบูรณ์ และสามารถเขียนได้เฉพาะแอปพลิเคชันเว็บขนาดเล็กเท่านั้น วิธีนี้จึงใช้สำหรับแอปพลิเคชันเครือข่ายที่มีฟังก์ชันจำกัดเท่านั้น
2. องค์ประกอบการอัพโหลดไฟล์ที่พัฒนาโดยใช้ VB (หรือ DELPHI ฯลฯ)
วิธีการนี้ใช้ VB (หรือ DELPHI ฯลฯ ภาษาการเขียนโปรแกรม) เพื่อพัฒนาส่วนประกอบเซิร์ฟเวอร์ ASP เพื่อใช้บริการอัพโหลดไฟล์เฉพาะ ขั้นแรกจะใช้ฟังก์ชันแบบฟอร์ม ASP เพื่ออัปโหลดไฟล์ (รูปแบบไบนารี) จากไคลเอนต์ไปยังเซิร์ฟเวอร์ จากนั้นใช้ส่วนประกอบที่พัฒนาโดย VB เพื่อประมวลผลไฟล์ไบนารีเป็นไฟล์ที่สามารถอ่านและเขียนได้ตามปกติ วิธีการนี้ต้องการโปรแกรมเมอร์ไม่เพียงแต่จะต้องเชี่ยวชาญภาษา ASP เท่านั้น แต่ยังต้องใช้ภาษาของบุคคลที่สามเช่น VB สำหรับการเขียนโปรแกรมส่วนประกอบซึ่งจะเพิ่มความยากในการพัฒนา
3.
วิธีนี้คล้ายกับวิธีก่อนหน้าโดยใช้เทคโนโลยีฐานข้อมูล ความแตกต่างอยู่ที่การประมวลผลไฟล์ไบนารี่ที่อัพโหลด จะใช้ฐานข้อมูลเพื่อบันทึกไฟล์ไบนารี ทั้งฐานข้อมูลขนาดเล็กและฐานข้อมูลขนาดใหญ่จะมีประเภทข้อมูลสำหรับการจัดเก็บข้อมูลไบนารี่ เพียงจัดเก็บข้อมูลในช่องที่เกี่ยวข้องในวิธี Append Chunk แม้ว่าวิธีนี้จะง่ายและเป็นไปได้ เนื่องจากขนาดของไฟล์ที่อัปโหลดในแต่ละครั้งจะแตกต่างกัน จะทำให้เปลืองพื้นที่ฐานข้อมูลอย่างมากและลดความเร็วในการเข้าถึงข้อมูล และจะสามารถอัปโหลดไฟล์ได้ในสภาพแวดล้อมฐานข้อมูลเท่านั้น ทำให้เกิดความไม่สะดวกอย่างมาก
การวิเคราะห์ตัวอย่าง
อย่างไรก็ตาม การใช้เทคโนโลยี ASP เพื่อใช้งานฟังก์ชันอัพโหลดไฟล์โดยตรงนั้น ต้องการเพียงโปรแกรมเมอร์เท่านั้นที่จะเชี่ยวชาญเทคโนโลยี ASP เดียว ซึ่ง
ช่วยลดความยากในการเขียนโปรแกรมได้อย่างมาก ด้านล่างนี้เราจะแนะนำวิธีการใช้วิธีนี้ผ่านตัวอย่าง
1. แบบฟอร์มการอัพโหลดไฟล์
ก่อนอื่นคุณต้องเขียนแบบฟอร์มที่สามารถจัดให้มีฟังก์ชั่นการอัพโหลดไฟล์ได้ โปรแกรมมีดังนี้:
<Form action="upload.asp" method=post enctype="multipart/form-data">
อัปโหลดไฟล์:<Input type=file name=file1><br>
<ประเภทอินพุต=ชื่อส่ง=ค่าการอัปโหลด="อัปโหลด">
</form>
ในหมู่พวกเขา พารามิเตอร์ enctype ใช้เพื่อตั้งค่าวิธีการเข้ารหัส MIME ของแบบฟอร์ม เมื่ออัปโหลดไฟล์ (หรือมีกล่องข้อความ) จะต้องตั้งค่าแอตทริบิวต์เป็น "multipart/form-data" asp คือฝั่งเซิร์ฟเวอร์ โปรแกรม ASP ที่ประมวลผลสตรีมไฟล์ไบนารีที่ได้รับจะถูกนำมาใช้ในบทความนี้
2. การวิเคราะห์รูปแบบไฟล์ที่อัปโหลด
ก่อนที่จะประมวลผลไฟล์ เราต้องเข้าใจรูปแบบเฉพาะของไฟล์ที่อัปโหลดก่อน เราสามารถดูรหัสไบนารี่ได้โดยการเขียนโปรแกรม ASP ง่ายๆ ต่อไปนี้:
<%
ขนาดไฟล์=Request.TotalBytes 'รับขนาดของไฟล์ที่อัพโหลด
filedata=Request.BinaryRead(filesize) 'รับข้อมูลไบนารี่ของไฟล์ที่อัพโหลด
ข้อมูลไฟล์ Response.BinaryWrite 'แสดงข้อมูลไบนารีบนเบราว์เซอร์
%>
วิเคราะห์รหัสไบนารี่ของไฟล์ที่อัพโหลดที่แสดงบนเบราว์เซอร์และพบว่ารหัสประกอบด้วยสี่ส่วน (หากอัพโหลดไฟล์หรือกล่องข้อความหลายไฟล์พร้อมกัน รหัสจะถูกจัดเรียงตามลำดับการอัพโหลดโดยที่เหมือนกัน ) และเนื้อหาของแต่ละส่วนจะคั่นด้วยสัญลักษณ์ขึ้นบรรทัดใหม่และการป้อนบรรทัด:
1) ส่วนแรก (เครื่องหมายเริ่มต้น)
-------------------------------7d329631b04d4
2) ส่วนที่ 2 (คำอธิบายไฟล์)
การจัดการเนื้อหา: form-data; name="file1"; filename="C:Documents and SettingsAdministratorMy DocumentsInvitation.doc" Content-Type: application/msword
in ดังนั้น เราจะได้ชื่อไฟล์และพาธสัมบูรณ์ของไฟล์ที่อัพโหลดตลอดจนประเภทไฟล์ ข้อมูลนี้จำเป็นต่อการบันทึกไฟล์อย่างถูกต้อง
3) ส่วนที่สาม (เนื้อหาไฟล์)
คือเนื้อหาไบนารีของไฟล์ ซึ่งละไว้
4) Part 4 (End Mark)
--------------------------7d329631b04d4
มาดูเนื้อหาของ Part 1 และ Part 4 กันดีกว่า , "-- ---------------------------------- 7d329631b04d4" (ค่าจะแตกต่างกันทุกครั้งที่คุณอัปโหลด) มีบทบาทเป็นตัวคั่น เป็นจุดเริ่มต้นและจุดสิ้นสุดของข้อมูล (เมื่อมีการอัปโหลดหลายรายการ) ในแง่ของข้อมูลที่จำเป็นในการบันทึกไฟล์ อันดับแรกเราต้องได้รับชื่อไฟล์จาก "ชื่อไฟล์" ของส่วนที่สองของข้อมูล จากนั้นเราจำเป็นต้องค้นหาตำแหน่งเริ่มต้นของไฟล์อย่างถูกต้อง และสุดท้ายก็ใช้เทคโนโลยี ASP เพื่อบันทึกไฟล์ไบนารีด้วยชื่อไฟล์ดั้งเดิม หากมีการอัปโหลดเนื้อหาหลายรายการ (เช่น กล่องข้อความและไฟล์หลายรายการ) พร้อมกัน เนื้อหาเหล่านั้นจะได้รับการประมวลผลในลักษณะเดียวกัน เนื้อหาแต่ละส่วนจะรวมอยู่ในตัวคั่น แต่กล่องข้อความและไฟล์จะแสดงในรูปแบบที่แตกต่างกันเล็กน้อย ซึ่งสามารถทำได้โดยการวิเคราะห์รหัสไบนารี่โดยเฉพาะเพื่อทำความเข้าใจ
3. ใช้เทคโนโลยี ASP เพื่อใช้จัดเก็บไฟล์
และอัปโหลดการประมวลผลโค้ดไฟล์
1) รับโค้ดตัวคั่น
จากการวิเคราะห์ข้างต้น เราทราบแล้วว่าตัวคั่นมีบทบาทสำคัญในการแบ่งส่วนข้อมูลหลายส่วน (รวมถึงกล่องข้อความและไฟล์ประเภทต่างๆ ) . ดังที่ได้รับการวิเคราะห์ก่อนหน้านี้ ตัวคั่นจะปรากฏขึ้นก่อนสัญลักษณ์แคร่แคร่แรกและสัญลักษณ์ป้อนบรรทัด ดังนั้นสามารถรับโค้ดตัวคั่นได้จากโปรแกรมต่อไปนี้:
<%
newline=chrB(13) & chrB(10) 'newline แสดงถึงอักขระส่งคืนเลขฐานสอง
ขนาดไฟล์=Request.TotalBytes 'คือขนาดของไฟล์ที่อัพโหลด
filedata=Request.BinaryRead(filesize) 'filedata คือข้อมูลไบนารี่ของไฟล์ที่อัพโหลด
divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider คือตัวแบ่ง
%>
หมายเหตุ: เนื่องจากกระบวนการทั้งหมดที่นี่เป็นรหัสไบต์ไบนารี่ ฟังก์ชันทั้งหมดจึงใช้เวอร์ชันไบนารี่โดยเพิ่ม "b"
2) รับเนื้อหาของไฟล์ (หรือกล่องข้อความ)
(1) ฟังก์ชั่นเตรียมการ (แปลงสตริงไบนารี่เป็นสตริง)
เนื้อหาของไฟล์ที่อัปโหลดไม่จำเป็นต้องผ่านกระบวนการแปลงจากไบนารีเป็นสตริงและสามารถบันทึกได้โดยตรง . อย่างไรก็ตาม หากคุณต้องการแยกเนื้อหาของกล่องข้อความหรือชื่อไฟล์ คุณต้องทำการแปลง ดังนั้นจึงจำเป็นต้องเขียนฟังก์ชันการแปลงสากลที่เหมาะกับอักขระภาษาจีน ต่อไปนี้เป็นรหัสฟังก์ชัน:
ฟังก์ชั่น BtoS (bstr)
ถ้าไม่เป็น Null (bstr) แล้ว
สำหรับ i = 0 ถึง lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
ถ้า ascb(bchr)>127 ดังนั้น 'อักขระภาษาจีนเป็นไบต์คู่ ดังนั้นจึงต้องประมวลผลอักขระสองตัวพร้อมกัน
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
ฉัน = ฉัน+1
อื่น
temp = temp&chr(ascb(bchr))
สิ้นสุดถ้า
ต่อไป
สิ้นสุดถ้า
BtoS=อุณหภูมิ
ฟังก์ชันสิ้นสุด
(2) รับเนื้อหาของไฟล์ (หรือกล่องข้อความ)
ในแอปพลิเคชันเว็บจริง การอัปโหลดอาจเกี่ยวข้องกับเนื้อหาหลายรายการ เช่น กล่องข้อความหลายกล่อง ไฟล์หลายไฟล์ เป็นต้น ไฟล์และกล่องข้อความสามารถแยกแยะได้ง่าย ข้อมูลไฟล์มีสตริง "filename=" ดังนั้นเราจึงเขียนฟังก์ชันทั่วไปต่อไปนี้ ซึ่งสามารถใช้เพื่อแยกเนื้อหาไฟล์และเนื้อหากล่องข้อความ (จำเป็นต้องมีการแปลงไบนารี):
ฟังก์ชัน getdata(ข้อมูล byval, ตัวแบ่ง byval, สุดท้าย) 'data แสดงถึงสตริงไบนารี่; สัญลักษณ์ สุดท้าย หมายถึง ตำแหน่งสิ้นสุดของข้อมูล
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'ไบนารีของสตริง "ชื่อไฟล์" ด่วน
bncrlf=chrb(13)&chrb(10) 'อักขระส่งคืนเลขฐานสอง
startpos = instrb (ข้อมูล, ตัวแบ่ง) + lenb (ตัวแบ่ง) + lenb (bncrlf) 'ตำแหน่งเริ่มต้น
endpos = instrb(startpos,data,divider)-lenb(bncrlf) 'ตำแหน่งสิ้นสุด
part1 = midb(data, startpos, endpos-startpos) 'เนื้อหาระหว่างตัวคั่นสองตัว
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' ย่อหน้าคำอธิบายก่อนเนื้อหา
ถ้า (instrb(firstline,filename)=0) จากนั้น 'ถ้าเป็นกล่องข้อความ ให้รับเนื้อหาสตริงของกล่องข้อความ
Stemp=midb(ส่วนที่ 1,คำแนะนำ(ส่วนที่ 1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(ส่วนที่ 1)-instrb(ส่วนที่ 1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(ขั้นตอน)
มิฉะนั้น 'หากเป็นไฟล์ ให้รับเนื้อหาไบนารีของไฟล์
Getdata=midb (ตอนที่ 1, instrb (ตอนที่ 1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (ตอนที่ 1)
-instrb(ส่วนที่ 1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
สิ้นสุดถ้า
สุดท้าย=จุดสิ้นสุด
ฟังก์ชันสิ้นสุด
เรียกใช้ฟังก์ชันนี้โดยตรงในโปรแกรมเพื่อรับเนื้อหาของไฟล์ที่ต้องการ (หรือกล่องข้อความ) ดังที่แสดงด้านล่าง:
<%
Content=getdata (ข้อมูล ตัวแบ่ง ตำแหน่ง)
%>
3) มีการวิเคราะห์การได้รับชื่อไฟล์มาก่อนแล้ว ฟิลด์ "filename=" ของสตรีมข้อมูลไฟล์ที่อัปโหลดประกอบด้วยชื่อและพาธสัมบูรณ์ของไฟล์ โดยทั่วไปแล้ว เราจำเป็นต้องแยกชื่อไฟล์ในพาธเท่านั้น ต่อไปนี้คือโค้ดโปรแกรม:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline คือข้อมูลส่วนคำอธิบายที่ได้รับข้างต้น chr(92)
ด่วน"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'รับชื่อไฟล์
%>
ใช้ ASP เพื่อใช้งานฟังก์ชันการอัพโหลดไฟล์โดยตรง
โปรแกรมเมอร์ ASP แบบดั้งเดิมสามารถใช้เฉพาะอ็อบเจ็กต์ FILESYSTEMOBJECT เพื่อย้าย คัดลอก ลบ และดำเนินการอื่นๆ กับไฟล์ข้อความ (.txt) หากคุณต้องการประมวลผลอ็อบเจ็กต์ไบนารี่ คุณต้องใช้ ที่แนะนำไว้ก่อนหน้านี้ในบทความนี้เพื่อให้บรรลุผล อย่างไรก็ตาม ขณะนี้วัตถุ ADO.STREAM ใน ASP สามารถดำเนินการกับวัตถุข้อความและวัตถุไบนารีได้ในเวลาเดียวกัน (สามารถดาวน์โหลดได้ที่ http://www.microsoft.com/data ) และคุณสามารถใช้วัตถุดังกล่าวเพื่อปรับใช้การอัปโหลดไฟล์ได้โดยตรง ฟังก์ชั่นใน ASP ด้านล่างนี้ เราจะแนะนำขั้นตอนการดำเนินการ
1) เปิดวัตถุ STREAM
สำหรับวัตถุ SREAM หากคุณต้องการบันทึกไฟล์ คุณต้องบันทึกเนื้อหาทั้งหมดของวัตถุ ดังนั้นเราจึงต้องสร้างออบเจ็กต์ STREAM สองรายการ (หรือมากกว่า) หนึ่งในนั้นคือสตรีมข้อมูลต้นทาง ซึ่งรับข้อมูลไบนารีเริ่มต้น และอีกอันคือสตรีมข้อมูลปลายทาง ซึ่งรับข้อมูลที่ประมวลผลจากสตรีมข้อมูลต้นทาง และสุดท้าย บันทึกลงในไฟล์ที่ต้องการ
-
set str=server.CreateObject("ADODB.Stream") 'str คือสตรีมข้อมูลต้นทาง
str.Mode=3 'ตั้งค่าโหมดเปิด 3 สามารถอ่านและเขียนได้
str.Type=1 'ตั้งค่าประเภทข้อมูล 1 เป็นข้อมูลไบนารี่
str.เปิด
set desc=server.CreateObject("ADODB.Stream") 'desc คือสตรีมข้อมูลเป้าหมาย
อธิบายMode=3
ประเภทเรียง=1
อธิบายเปิด
%>
2) การคัดลอกเนื้อหาระหว่างออบเจ็กต์ STEAM
ในส่วนนี้ คุณต้องค้นหาจุดเริ่มต้นของไฟล์ในสตรีมข้อมูลต้นทาง และค้นหาความยาวของเนื้อหาไฟล์ก่อนจึงจะสามารถคัดลอกไฟล์ไปยังสตรีมข้อมูลปลายทางได้อย่างถูกต้อง และบันทึก รหัสโปรแกรมจะเป็นดังนี้:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata เป็นเนื้อหาที่อัพโหลดทั้งหมด
str.Write formdata 'กำหนดสตรีมข้อมูลต้นทาง
str.position=count-lenb(result)-2 'ตำแหน่งชี้ไปที่จุดเริ่มต้นของไฟล์'
str.copyto desc, lenb(filecotent) 'lenb(filecontent) แสดงถึงความยาวของไฟล์
desc.SaveToFile fullpath,2 'บันทึกไฟล์ด้วยพาธและชื่อที่ระบุโดย fullpath'
%>
3) ปิดวัตถุ STEAM
หลังจากการเขียนโปรแกรมเสร็จสิ้น ควรปิดและปล่อยวัตถุ STEAM ดังที่แสดงด้านล่าง:
<%
คำอธิบาย ปิด
ตั้งค่า desc=nothing
ถ.ปิด
ตั้งค่า STR=ไม่มีอะไร
%>
สรุป
บทความนี้ให้วิธีการอัปโหลดไฟล์โดยตรงโดยใช้ ASP ซึ่งได้รับการนำไปใช้อย่างดีในระบบการจัดการข้อมูลที่พัฒนาโดยหน่วยนี้ การปฏิบัติได้พิสูจน์แล้วว่าวิธีนี้ง่ายกว่าและมีประสิทธิภาพมากกว่าวิธีการอัพโหลดไฟล์แบบเดิมๆ หลายวิธี