<Tindakan formulir=upload.asp metode=posting enctype=multipart/form-data>
Unggah file:<Jenis masukan=nama file=file1><br>
<tipe masukan=kirim nama=nilai unggah=unggah>
</bentuk>
Diantaranya, parameter enctype digunakan untuk mengatur metode pengkodean MIME formulir. Saat mengunggah file (atau berisi kotak teks pada saat yang sama), atributnya harus disetel ke multipart/form-data; file biner sisi server diterima. Program ASP untuk pemrosesan aliran akan diperkenalkan nanti di artikel ini.
2. Unggah analisis format file
Sebelum memproses file, pertama-tama kita harus memahami format spesifik file yang diunggah. Kita dapat melihat kode binernya dengan menulis program ASP sederhana berikut:
<%
filesize=Request.TotalBytes 'Dapatkan ukuran file yang diunggah
filedata=Request.BinaryRead(filesize) 'Dapatkan data biner dari file yang diunggah
Response.BinaryWrite filedata 'Menampilkan data biner di browser
%>
Menganalisis kode biner dari file yang diunggah yang ditampilkan di browser, kami menemukan bahwa kode tersebut terdiri dari empat bagian (jika beberapa file atau kotak teks diunggah secara bersamaan, kode-kode tersebut disusun sesuai urutan pengunggahan, dengan format yang sama ), dan konten setiap bagian dimasukkan menggunakan karakter baris baru yang dipisahkan:
1) Bagian pertama (bendera awal)
--------------------------7d329631b04d4
2) Bagian 2 (Deskripsi Dokumen)
Disposisi Konten: form-data; nama=file1; nama file=C:/Dokumen dan Pengaturan/Administrator/Dokumen Saya/Invitation.doc Tipe Konten: aplikasi/msword
Di sini, kita bisa mendapatkan nama file dan jalur absolut dari file yang diunggah, serta jenis file. Informasi ini penting untuk menyimpan file dengan benar.
3) Bagian 3 (Isi Dokumen)
Artinya, konten biner dari file tersebut, dihilangkan.
4) Bagian 4 (tanda akhir)
--------------------------7d329631b04d4
Menggabungkan isi bagian pertama dan keempat, -----------------------------7d329631b04d4 (nilainya berbeda setiap kali diunggah ) Sama) berperan sebagai pemisah, yang menandai awal dan akhir suatu data (bila ada beberapa konten yang diunggah). Mengenai informasi yang diperlukan untuk menyimpan file, pertama-tama kita perlu mendapatkan nama file dari nama file bagian kedua data, kemudian kita perlu menemukan posisi awal file dengan benar, dan terakhir menggunakan teknologi ASP untuk menyimpan file biner dengan nama file aslinya. Jika beberapa konten (seperti beberapa kotak teks dan file) diunggah pada saat yang sama, konten tersebut diproses dengan cara yang sama. Setiap bagian konten disertakan dalam pembatas, namun kotak teks dan file diekspresikan dengan cara yang sedikit berbeda Hal ini dapat dilakukan dengan menganalisis kode binernya secara khusus untuk memahaminya.
3. Gunakan teknologi ASP untuk mengimplementasikan penyimpanan file
Pemrosesan kode file yang diunggah
1) Dapatkan kode pembatas
Dari analisa di atas, kita telah mengetahui bahwa separator berperan penting dalam membagi beberapa segmen data (termasuk kotak teks dan berbagai jenis file). Seperti yang telah dianalisis sebelumnya, pemisah muncul sebelum simbol pengangkutan kembali dan garis umpan pertama. Oleh karena itu, kode pembatas dapat diperoleh melalui program berikut:
<%
newline=chrB(13) & chrB(10) 'baris baru mewakili karakter pengangkutan biner
filesize=Request.TotalBytes 'filesize adalah ukuran file yang diunggah
filedata=Request.BinaryRead(filesize) 'filedata adalah data biner dari file yang diunggah
pembagi=leftB(filedata,clng(instrb(filedata,newline))-1) 'pembagi adalah pembagi
%>
Catatan: Karena kita berurusan dengan bytecode biner di sini, semua fungsi menggunakan versi binernya, dengan tambahan b.
2) Dapatkan konten file (atau kotak teks).
(1) Fungsi persiapan (mengubah string biner menjadi string)
Isi file yang diunggah tidak perlu melalui proses konversi dari biner ke string, dan dapat langsung disimpan. Namun, jika Anda perlu mengekstrak isi kotak teks atau nama file, Anda harus melakukan konversi. Oleh karena itu, perlu untuk menulis fungsi konversi universal yang sesuai untuk karakter Cina. Berikut ini adalah kode fungsinya:
Fungsi BtoS (bstr)
Jika bukan Apakah Null (bstr) Lalu
untuk i = 0 hingga lenb(bstr) - 1
bchr = tengahb(bstr,i+1,1)
Jika ascb(bchr)>127 Maka 'Karakter Cina adalah byte ganda, jadi dua karakter harus diproses bersama
suhu = suhu&chr(ascw(midb(bstr, i+2, 1)&bchr))
saya = saya+1
Kalau tidak
suhu = suhu&chr(ascb(bchr))
Akhiri Jika
Berikutnya
Akhiri Jika
BtoS=suhu
Fungsi Akhir
(2) Dapatkan konten file (atau kotak teks)
Dalam aplikasi WEB sebenarnya, operasi pengunggahan mungkin melibatkan banyak konten, seperti beberapa kotak teks, banyak file, dll. File dan kotak teks mudah dibedakan. Data file berisi nama file= string. Oleh karena itu, kami menulis fungsi umum berikut, yang dapat digunakan untuk mengekstrak konten file dan konten kotak teks (diperlukan konversi biner):
Fungsi getdata(data byval, pembagi byval, final) 'data mewakili string biner; pembagi mewakili pemisah final mewakili posisi akhir data;
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Representasi biner dari string nama file=
bncrlf=chrb(13)&chrb(10) 'Karakter pengembalian kereta biner
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) 'Posisi awal
endpos = instrb(startpos,data, pembagi)-lenb(bncrlf) 'Posisi akhir
part1 = midb(data, startpos, endpos-startpos) 'Isi antara dua pemisah
baris pertama = midb(part1, 1, instrb(part1, bncrlf)-1) ' Deskripsi paragraf sebelum konten
If (instrb(firstline,filename)=0) Kemudian 'Jika itu adalah kotak teks, dapatkan konten string kotak teks
stemp=midb(bagian1,instrb(bagian1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(bagian1)-instrb(bagian1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(batang)
Lain 'Jika itu adalah file, dapatkan konten biner dari file tersebut
Getdata=midb (bagian1, instrb (bagian1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (bagian1)
-instrb(bagian1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Akhiri Jika
Akhir=pos akhir
Fungsi akhir
Dengan memanggil fungsi ini langsung dalam program, Anda bisa mendapatkan konten file yang diperlukan (atau kotak teks), seperti yang ditunjukkan di bawah ini:
<%
Content=getdata (data, pembagi, posisi)
%>
3) Dapatkan nama file
Seperti yang telah dianalisis sebelumnya, bidang nama file = aliran data file unggahan berisi nama dan jalur absolut file. Secara umum kita hanya perlu mengekstrak nama file pada pathnya. Berikut kode programnya:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline adalah data bagian deskripsi yang diperoleh di atas, chr(92)
cepat/
nama file=midb(baris pertama,namepos+1,lenb(baris pertama)-namepos-1) 'Dapatkan nama file
%>
Gunakan ASP untuk langsung mengimplementasikan fungsi unggah file
Pemrogram ASP tradisional hanya dapat menggunakan objek FILESYSTEMOBJECT untuk memindahkan, menyalin, menghapus, dan operasi lain pada file teks (.txt). Jika mereka perlu memproses objek biner, mereka harus menggunakan metode yang diperkenalkan sebelumnya di artikel ini. Namun, sekarang objek ADO.STREAM di ASP dapat mengoperasikan objek teks dan objek biner secara bersamaan (dapat diunduh di http://www.microsoft.com/data), dan Anda dapat menggunakannya untuk langsung mengimplementasikan unggahan file berfungsi di ASP. Di bawah ini, kami memperkenalkan proses implementasinya.
1) Buka objek STREAM
Untuk objek SREAM, jika ingin menyimpan filenya, Anda harus menyimpan seluruh isi objek tersebut. Oleh karena itu, kita harus membuat dua (atau lebih) objek STREAM, salah satunya adalah aliran data sumber, yang menerima data biner awal; yang lainnya adalah aliran data tujuan, yang menerima data yang diproses dari aliran data sumber, dan Terakhir simpan ke file yang diinginkan.
<%
set str=server.CreateObject(ADODB.Stream) 'str adalah aliran data sumber
str.Mode=3 'Atur mode terbuka, 3 dapat dibaca dan ditulis
str.Type=1 'Atur tipe datanya, 1 adalah data biner
str.Buka
set desc=server.CreateObject(ADODB.Stream) 'desc adalah aliran data target
desc.Mode=3
Des.Jenis=1
desc.Buka
%>
2) Menyalin konten antar objek STEAM
Di bagian ini, Anda harus menemukan awal file di aliran data sumber dan menemukan panjang konten file sebelum Anda dapat menyalin file dengan benar ke aliran data tujuan dan menyimpan file. Kode programnya adalah sebagai berikut:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata adalah semua konten yang diunggah
str.Tulis formdata ' Aliran data sumber tugas
str.position=count-lenb(result)-2 'posisi menunjuk ke awal file
str.copyto desc, lenb(filecotent) 'lenb(filecontent) mewakili panjang file
desc.SaveToFile fullpath,2 'Simpan file dengan path dan nama yang ditentukan oleh fullpath
%>
3) Tutup objek STEAM
Setelah pemrograman selesai, objek STEAM harus ditutup dan dilepaskan sebagai berikut:
<%
Des. Tutup
Setel deskripsi=tidak ada
Str.Tutup
Tetapkan STR=tidak ada
%>
Meringkaskan
Artikel ini memberikan metode untuk mengimplementasikan pengunggahan file secara langsung menggunakan ASP, yang telah diterapkan dengan baik dalam sistem manajemen informasi yang dikembangkan oleh unit ini. Praktek telah membuktikan bahwa metode ini lebih sederhana dan efisien dibandingkan beberapa metode pengunggahan file tradisional.