ที่มาของบทความนี้เกิดจากการที่ผมต้องสร้างโปรแกรม
J-sms ซึ่งมีความสามารถในการ Download ไฟล์ Banner มาแสดงที่ตัวโปรแกรม โดยจะต้องทำการสร้างไฟล์
asp ที่มีความสามารถในการเลือกรูป ที่ต้องการได้ อันนี้คือโจทย์นะครับ
สำหรับวิธีที่ผมได้คิดๆมาเพื่อสร้างไฟล์
asp ที่ต้องการคือ
- การใช้ FileSystemObject ในการเปิดไฟล์รูปที่ต้องการ แล้วทำการอ่านแล้ว
Response.Write ไฟล์ที่อ่านนั้น ออกมา แต่ปัญหามันติดอยูที่ว่า FileSystemObject
นั้นไม่ support กับไฟล์ binary ซึ่งไฟล์รูปภาพ ของเราก็เป็นไฟล์ binary
ทำให้ไม่สามารถจะใช้วิธีการนี้ได้
- ต่อมาผมก็ได้ คิดใช้ Response.redirect
(เป็นการสั่งให้ webbrowser โหลดไฟล์ หรือ รูปภาพ ที่ต้องการ) แต่วิธีการนี้ก็ใช้ไม่ได้อีกเช่นกัน
เหตุผลเพราะว่า การใช้ Response.redirect เป็นคำสั่งที่ Run บน Server เพื่อบอกให้
Server ส่งรูปแบบคำสั่งมายัง Client ( ซึ่งในที่นี้ก็คือ Webbrowser นั้นเอง)
เพื่อให้ Client ส่งคำสัง เพื่อ โหลด ไฟล์ หรือ รูปภาพ ที่ต้องการใหม่อีกครั้ง
ทำให้ตัวโปรแกรม J-sms ผมต้องทำงานเพิ่มอีก 1 ขั้นตอน ซึ่งผมคิดว่าไม่จำเป็นสักเท่าไหร่ทีต้องเสียเวลา
ทำกระบวนการ อย่างนั้น
ผมจึงค้นหาโค้ดจนมาพบกับ โค้ดที่ผมนำมาเสนอกันในบทความนี้นะครับ
ซึ่งพอจะอธิบายการทำงานได้ว่า โค้ดดังกว่าจะใช้การเปิดไฟล์ Binary โดยอาศัย
ADODB.Stream ซึ่งเป็น Object ที่สามารถเปิดไฟล์ Binary ได้ ต่อจากนั้น ก็ทำการ
Response.binarywrite ไฟล์ออกมา
ส่วนเทคนิคอื่นๆที่เกี่ยวข้อง จะเป็นการกำหนด
ContentType เพื่อบอกว่าเอกสารที่ส่งมาเป็นอะไร โดยที่นี้จะกำหนดเป็น application/x-unknown
ซึ่งจะบอกให้ client เลือกที่จะ Download ไฟล์ดังกล่าง หากคุณต้องการแจ้งว่าไฟล์ดังกล่างเป็นไฟล์
gif หรือ jpg ก็อาจกำหนดเป็น image/jpg หรือ image/jpeg ตามลำดับครับ
ก่อนทำการเขียนโค้ด ให้คุณทำการเตรียมรูปภาพ
เป็น gif ไฟล์ ไว้สัก 3 ไฟล์ โดยกำหนดชื่อเป็น pic1.gif ,pic2.gif และ pic3.gif
แล้วเก็บไว้ใน path เดียวกับไฟล์ getPic.asp ที่เราจะเขียนต่อไป
โค้ดจะมีดังนี้
getPic.asp
<% no=request("no") if no="" then no="1" no="pic"&no&".gif"
response.contenttype
="application/x-unknown"
'image/gif
response.addheader "Content-Disposition","attachment;filename="&
chr(34) & "image.gif"
& chr(34)
response.binarywrite
getBinaryFile(Server.mapPath(no))
function
getBinaryFile(sFile)
Dim adTypeBinary
Dim oStream
adTypeBinary=1
set oStream = Server.CreateObject("ADODB.Stream")
oStream.Open
oStream.Type=adTypeBinary
oStream.LoadFromFile sFile
getBinaryFile =oStream.read
set oStream=nothing
end function
%>
|
รูปแสดงผลที่ได้เมื่อกำหนด
contenttype เป็น image/gif
ทิ้งท้าย
จากรูปจะเห็นได้ว่าผมจะสามารถเลือกรูปได้โดยการกำหนดค่าของ no ว่าจะเป็นรูปที่เท่าไหร่
เช่น http://localhost/getPic.asp?no=1 หากว่าคุณต้องการให้ Webbrowser สามารถแสดงรูป
สามารถทำได้โดย ไปกำหนดค่าของ contenttype เป็น image/gif เพื่อบอกว่าไฟล์ที่ส่งมาเป็น
ภาพ gif หวังว่าคงมีประโยชน์ สำหรับเพื่อนๆหลายท่านนะครับ หาผมพบโค้ดที่คิดว่ามีประโยชน์
จะได้นำเสนอกันอีกในครั้งหน้า แล้วพบกันใหม่กับ 9'M |