Abstrak: Dalam lingkungan aplikasi berbasis browser/server, pengunggahan berbagai jenis file di browser selalu menjadi salah satu permasalahan yang mendera aplikasi pengelolaan file pengguna. Ada tiga mekanisme untuk mengunggah file dalam HTTP: RFC1867, PUT dan WebDAV. Metode implementasi yang umum adalah dengan menggunakan tipe baru yang diperkenalkan di RFC1867: File dan objek ADO Stream. Artikel ini membahas metode pengunggahan dan prinsip penerapan di atas, serta memberikan contoh solusi spesifik.
Kata Kunci: Komponen ASP Objek FILE
Saat ini, aplikasi berbasis model browser/server lebih populer. Ketika pengguna perlu mentransfer file ke server, salah satu metode yang umum adalah menjalankan server FTP dan mengatur direktori default FTP setiap pengguna sebagai direktori home Web pengguna, sehingga pengguna dapat menjalankan program klien FTP dan mengunggah file ke server. direktori Web yang ditentukan. Hal ini mengharuskan pengguna untuk mengetahui cara menggunakan program klien FTP. Oleh karena itu, solusi ini hanya layak untuk pengguna berpengalaman yang akrab dengan FTP. Jika kita dapat mengintegrasikan fungsi pengunggahan file dengan Web sehingga pengguna dapat menyelesaikan tugas pengunggahan hanya dengan menggunakan browser Web, maka akan sangat nyaman bagi mereka. Namun, karena keterbatasan File System Object yang hanya dapat mengirimkan file teks, masalah terbesar ASP adalah pengunggahan file. Berikut ini penjelasan cara upload file pada halaman web berdasarkan protokol HTTP.
satu. Tiga mekanisme untuk mengunggah melalui HTTP
Ada tiga mekanisme untuk mengunggah melalui HTTP: RFC1867, PUT dan WebDAV.
PUT adalah kata kerja HTTP baru yang diperkenalkan di HTTP 1.1. Ketika server web menerima HTTP PUT dan nama objek, server tersebut mengautentikasi pengguna, menerima konten aliran HTTP, dan menyimpannya langsung ke server web. Karena hal ini dapat mengganggu situs web, hal ini juga kehilangan keuntungan terbesar dari HTTP: kemampuan program server. Dalam kasus PUT, server menangani permintaan itu sendiri: tidak ada ruang bagi aplikasi CGI atau ASP untuk campur tangan. Satu-satunya cara bagi aplikasi Anda untuk menangkap PUT adalah dengan beroperasi pada tingkat rendah, lapisan pemfilteran ISAPI. Oleh karena itu, penerapan PUT sangat terbatas.
WebDAV memungkinkan otentikasi terdistribusi dan terjemahan konten web. Ini memperkenalkan beberapa kata kerja HTTP baru yang memungkinkan pengunggahan, mengunci/membuka kunci, dan memeriksa/memeriksa konten web melalui HTTP. "Simpan ke web" di Office 2000 diimplementasikan melalui WebDAV. Jika Anda hanya tertarik mengunggah konten, WebDAV berfungsi dengan baik dan memecahkan banyak masalah. Namun, jika Anda perlu mengunggah file dalam aplikasi web Anda, WebDAV tidak berguna bagi Anda. Seperti HTTP PUT, kata kerja WebDAV tersebut ditafsirkan oleh server, bukan aplikasi web. Anda perlu bekerja pada lapisan pemfilteran ISAPI untuk mengakses kata kerja WebDAV ini dan menafsirkan konten dalam aplikasi Anda.
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) digunakan sebagai standar yang diusulkan sebelum akhirnya diterima oleh W3C dalam HTML3.2. Ini adalah ide yang sangat sederhana namun kuat: mendefinisikan tipe baru di bidang formulir.
<INPUT TYPE="FILE">
Dan menambahkan skema pengkodean yang berbeda ke formulir itu sendiri, daripada menggunakan yang biasa:
<FORM ACTION="formproc.asp" METHOD="POST">
tetapi menggunakan:
<FORM ACTION="formproc .asp " METHOD="POST" ENCTYPE="multipart/form-data">
Skema pengkodean ini lebih efisien daripada skema pengkodean formulir "application/x-url-encoded" default saat mentransmisikan data dalam jumlah besar. jauh lebih tinggi. Pengkodean URL hanya memiliki rangkaian karakter yang sangat terbatas. Setiap karakter yang melebihi rangkaian karakter harus diganti dengan '%nn', dengan nn mewakili 2 digit heksadesimal yang sesuai. Misalnya, karakter spasi biasa pun harus diganti dengan '%20'. RFC1867, di sisi lain, menggunakan pengkodean MIME multi-bagian, seperti yang biasa terlihat dalam pesan email, untuk mengirimkan data dalam jumlah besar tanpa pengkodean, tetapi hanya dengan beberapa header sederhana namun berguna di sekitar data. Produsen browser besar telah mengadopsi tombol "Jelajahi..." yang direkomendasikan, dan pengguna dapat dengan mudah menggunakan kotak dialog "Buka File..." lokal untuk memilih file yang akan diunggah.
RFC1867 masih menyisakan sebagian besar metode pengunggahan file yang fleksibel ke aplikasi web Anda. PUT memiliki kegunaan yang sangat terbatas. WebDAV berguna bagi penulis konten, seperti pengguna FrontPage, namun kurang berguna bagi pengembang web yang ingin memasukkan unggahan file ke dalam aplikasi web mereka. Oleh karena itu, RFC1867 adalah cara terbaik untuk menyertakan unggahan file dalam aplikasi web.
Dalam aplikasi praktisnya, Microsoft menyediakan Posting Acceptor secara gratis. ASP tidak memahami skema pengkodean "multipart/form-data". Sebagai gantinya, Microsoft menyediakan Posting Acceptor, sebuah aplikasi ISAPI yang menerima REPOST ke halaman ASP setelah upload selesai.
SA-FileUp dari Software Artisans adalah salah satu komponen Server Aktif komersial pertama. Setelah beberapa perbaikan, sekarang ada sebagai komponen ASP murni.
dua.
Prinsip dasaranalisis prinsip implementasi pengunggahan file berbasis ASP
adalah: gunakan metode BinaryRead dari objek ADO Stream untuk membaca semua data dalam FORM, mencegat data file yang diperlukan, dan menyimpannya sebagai file biner.
Berikut contoh halaman upload file (upload.htm):
<html>
<tubuh>
<form name="Unggah" Metode="Posting" Enctype="multipart/form-data" Action="Unggah.asp">
<masukan tipe="file" nama="NamaFile">
<INPUT TYPE="Kirim" VALUE="Unggah"></TD>
</bentuk>
</tubuh>
</html>
Objek file digunakan dalam program, sehingga data asli yang dibaca menggunakan metode BinaryRead di Upload.asp tidak hanya data file yang dipilih itu sendiri, tetapi juga mencakup path, jenis dan penyerahan file pada hard disk pengguna. Deskripsi formulir nama domain dan informasi terkait lainnya pada halaman tersebut, sehingga kita perlu mengekstrak konten spesifik dari file tersebut. Berdasarkan analisa, garis pemisah antara informasi header dan data adalah dua pasang carriage return dan line feed, dan terdapat juga informasi pemisahan di bagian akhir. Kita dapat memperoleh data file menggunakan metode yang mirip dengan berikut.
Redupkan FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Permintaan.TotalBytes
FormData=Permintaan.BinaryRead(Ukuran Formulir)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 adalah panjang dua pasang karakter carriage return dan line feed
DivStr=KiriB(FormData,InStrB(FormData,CLStr)-1)
Ukuran Data=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataMulai,Ukuran Data)
FormData adalah isi file.
Pemrosesan yang sesuai dapat dilakukan sesuai kebutuhan. Hal terakhir yang harus dilakukan adalah menyimpan file. Ada dua cara untuk menyimpan: pertama adalah dengan menggunakan metode operasi file biner dalam program seperti VB atau VC, menambahkan perpustakaan tipe yang sesuai ke proyek, dan terakhir mengkompilasinya menjadi file DLL, dan kemudian mendaftarkan file DLL saat menggunakan dia. . Prosedur penyimpanan file adalah sebagai berikut:
Public Function SaveFile(Pathname As String) As String
Redupkan objContext Sebagai ObjectContext
Redupkan objRequest Sebagai Permintaan
Setel objContext=GetObjectContext()
Setel objRequest=objContext("Permintaan")
'Potongan kode berikut terkait dengan operasi penyimpanan file Dim FormData() As Byte, CLStr, DivStr
Redupkan DataMulai Selama,Ukuran Data Selama
Ukuran Data=objRequest.TotalBytes
Redim FormData (Ukuran Data-1)
FormData=objRequest.BinaryRead(Ukuran Data)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=KiriB(FormData,InStrB(FormData,CLStr)-1)
Ukuran Data=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataMulai,Ukuran Data)
'Buat file biner dan tulis FormData ke dalamnya. Buka Pathname For Binary As 1
Masukkan #1,,FormData
Tutup #1
SimpanFile="Oke!"
Fungsi Akhir
yang keduaadalah dengan menggunakan metode operasi file biner yang disediakan di ADO STREAM. Pernyataan untuk menyimpan file adalah: StreamOBJ.SaveToFile (nama file,2). Dalam operasi semacam ini, kita dapat menyimpan operasi yang relevan dalam file kelas, dan ketika menerapkannya, cukup sertakan file kelas secara langsung dalam program ASP. Untuk metode pemrosesan spesifik, silakan merujuk ke pendahuluan yang relevan.
tiga. Contoh metode implementasi pengunggahan file
dapat menggunakan metode komponen atau tanpa komponen untuk mengimplementasikan pengunggahan file. Untuk kategori komponen, misalnya, Microsoft Posting Acceptor (disingkat MPA) adalah komponen server gratis yang dirilis oleh Microsoft. Instalasi komponen jenis ini juga relatif mudah. Untuk mpa Microsoft, jalankan saja file instalasinya. Untuk komponen dll secara umum, kita perlu mendaftarkannya. Misalnya, untuk menggunakan aspcnUP.dll, Anda hanya perlu menjalankan regsvr32 [path]aspcnUP.dll di Window 2000, dan sistem akan meminta Anda dengan pesan pendaftaran berhasil dan Anda dapat menggunakan komponen untuk kelas tanpa komponen, seperti kelas unggahan Komponen www.5xsoft.com -upload_5xsoft. Saat menggunakannya, cukup sertakan pernyataan berikut di handler:
<!--#include FILE="upload.inc"-->
Untuk properti dan metode operasi yang terkait dengan
pembuatan objek unggahan
, silakan merujuk ke panduan pengguna komponen ini.Berikut ini adalah source code untuk mengupload beberapa jenis file (upload.asp), dengan mengambil contoh komponen aspcnUP.dll:
<%@Language="vbscript"
Setel fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:upfile"
fileUP.Unggah
Untuk i=0 ke fileUP.Count
nama bidang=fileUP.Namabidang(i)
Jika fileUP.FileType(fieldname)="zip" Atau ileUP.FileType(fieldname)="rar" Lalu
fileUP.Simpan nama bidang
Akhiri Jika
Berikutnya
Setel fileUP=Tidak Ada
%>
Empat. Kesimpulan
Model aplikasi browser/server masih berkembang pesat di ASP Microsoft yang baru diluncurkan. NET memiliki fungsi unggah file bawaan, yang sangat sederhana dan nyaman digunakan. Sebagai teknologi anyar, ASP. NET bukan sekedar upgrade sederhana dari ASP, ini adalah kerangka kerja baru untuk pengembangan Web yang berisi banyak fitur baru. ASP. NET menyediakan kode yang lebih mudah untuk ditulis dan memiliki struktur yang lebih jelas. Dengan menggunakan kode-kode ini, kita akan lebih mudah menggunakan kembali dan membagikannya, sehingga mengembangkan program yang lebih praktis.