Ide penulisan: Encode file lokal dengan base64 di klien lalu kirimkan ke tujuan.
Selama pengujian, file yang diunggah terlalu besar sehingga menyebabkan waktu habis dan kegagalan.
Kemudian ditingkatkan. Pengkodean dikirim dalam beberapa segmen. Tes 20M berhasil.
Tujuan penulisan: Dalam solusi tradisional, Anda dapat memilih dan mengunggah satu per satu. Namun, akan lebih merepotkan jika harus membaca jalur file dalam database dan mengunggah file-file ini ke satu tempat.
Tentu saja dimungkinkan untuk menggunakan ftp untuk menemukan jalur satu per satu, tetapi akan lebih memakan waktu bagi saya untuk menemukan file-file ini setiap saat. Tujuan penulisan ini di sini terutama untuk mendapatkan file melalui jalur file di database dan mengunggah file ke satu tempat secara berkelompok pada satu waktu.
Tujuan utamanya adalah untuk melatih diri sendiri.
Proses solusi: Pada awalnya, saya mencoba menggunakan input keyboard simulasi untuk secara paksa menetapkan nilai ke kontrol file dan mengunggahnya menggunakan metode tradisional. Tapi saya selalu menemukan nilai null, dan bahkan banyak file tidak terkirim. Setelah berkonsultasi dengan beberapa informasi, sekarang saya mengambil semua jalur melalui database dan menuliskannya ke dalam js. Kemudian gunakan js di meja depan untuk membaca jalur ini dan mengirim file melalui xmlhttp.
Karena Internet Explorer tidak terlalu menyukai xmlHttp dan selalu menganggapnya memiliki perilaku jahat, sehingga selalu memberikan peringatan. Oleh karena itu, Anda tidak dapat menggunakan jalur web selama pengoperasian.
Kemudian server memiliki file untuk menerima pengkodean ini dan memecahkan kodenya. Jadi saya menyebutnya c/s
Saat ini, banyak kode yang masih diperbaiki.
Pengantar singkat:
--------------------------------------------------- ----------
aryFiles.push(c://aaa.zip);
aryFiles.push(c://bbb.exe);
Ini jalur file dan filenya bisa banyak
Nantinya, jalur ini juga dapat diperoleh di klien melalui kontrol file.
http://www.xxx.com/xxx/xxx.asp
Ini tujuannya, Anda dapat mengubahnya ke alamat yang Anda inginkan.
ado_stream.LoadFromFile(server.mappath(.) &/& + str_namafile)
server.mappath(.) &/& + str_filename Berikut adalah file yang akan dibaca.
server.mappath(.) &/& Jalurnya konsisten dengan jalur penyimpanan
ado_stream.SaveToFile server.mappath(.) &/& str_namafile,2
server.mappath(.) &/& Ini adalah jalur untuk menyimpan file. str_filename adalah nama file
Pembacaan dan penyimpanan di sini ditempatkan di direktori tempat program ditempatkan. Anda juga dapat menyimpannya seperti ini saat pengujian.
Masukkan potongan kode pertama secara lokal (misal:c:/upload.htm)
Letakkan potongan kode kedua di server, bisa server lokal atau server publik. Jaga agar tetap konsisten dengan tujuan di atas.
(misal:http://www.xxx.com/upload.asp atau http://localhost/www/upload.asp)
--------------------------------------------------- ---------------
Tindakan: Temukan di mana potongan kode pertama disimpan. Jalankan saja (misal: buka drive c dan jalankan upload.htm)
Kode klien</P><P><html><head></head><body> <input type=button onclick=BeginSendFiles(); value=Send/> <input type=button onclick=JavaScript: Rusak= benar ; nilai=interupsi/> <div id=ddd lebar=300px></div> </br> <DIV id=div_message></DIV></body></P><P><script bahasa=VBScript>Fungsi bytes2BSTR(vIn) strReturn = Untuk i = 1 Ke LenB(vIn) ThisCharCode = AscB(MidB(vIn,i ,1)) Jika ThisCharCode < &H80 Maka strReturn = strReturn & Chr(ThisCharCode) Else NextCharCode = AscB(MidB(vIn,i+1,1)) strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode)) i = i + 1 End If Next bytes2BSTR = strReturnEnd Function</script></P ><P><bahasa skrip=javascript> var xmlhttp; var ado_stream; var mFileName, mPartStart, mPartID, mPartEnd; var SendCount; var BlockSize; var Rusak; var aryFiles;</P><P> BlockSize = 1024*100; //Jumlah byte yang dikirim setiap kaliBreaked = false; P> P><P> // Mulai mengirim file fungsi BeginSendFiles() { initAryFiles(); } // Buatlah array file yang akan dikirim function initAryFiles() { aryFiles.push(c://aaa.zip) ; aryFiles.push(c://bbb.exe) ;//c://aaa. zip c ://bbb.exe file lokal aryFiles.reverse() ;//Nama file</P><P> function SendFile(vFullPath) { // File kosong tidak akan diunggah jika (!vFullPath) { return ; } Rusak = false ; div_message.innerHTML = ; ado_stream = new ActiveXObject(ADODB.Stream); // Baca aliran file ado_stream.Type = 1; ); // Baca file ado_stream.position = 0;</P><P> SendCount = Math.ceil(ado_stream.size/BlockSize) ; // Jika ada sisa, kirim sekali lagi</P><P> // alert(SendCount) ;</P><P> var reg = //b /w+./w+$/gi mFileName = reg.exec(vFullPath) ; mPartStart = benar ; mPartEnd = false ; { if (SendCount > 0) { var dom = new ActiveXObject(msxml2.DOMDocument); // Kirim file xml dom.async = false; node = dom.createProcessingInstruction(xml,version='1.0'); Buat simpul akar var root = dom.createElement(root); dom.appendChild(root); dom.documentElement.setAttribute(xmlns:dt, urn:schemas-microsoft-com:datatypes); // Buat simpul updata untuk disimpan simpul data biner = dom.createElement(upData); pengkodean base64 var att = dom.createAttribute(Nama File); // Atribut nama file att.value = mFileName; // Tanda awal bagian att .value = mPartStart; simpul.setAttributeNode(att); att = null; var att = dom.createAttribute(PartID); Nomor bagian att.value = mPartID; node.setAttributeNode(att); att = null; var att = dom.createAttribute(PartEnd); // Tanda akhir bagian att.value = mPartEnd; ;</P><P> root.appendChild(node) ; node.nodeTypedValue = ado_stream.Read(BlockSize); Data simpul dibaca dari aliran, simpul dengan panjang tetap = null; SendCount -= 1; xmlhttp = new ActiveXObject(Microsoft.XMLHTTP); false); //http://www.xxx.com/xxx/xxx.asp adalah file di jalur web xmlhttp.onreadystatechange= CallBack; = null ; } else { ado_stream.Close(); ado_stream = null } } function CallBack() { // Pengunggahan berhasil if(xmlhttp.readystate == 4) { // Periksa apakah pengunggahan terhenti jika(Rusak) { kembali ; }</P><P> if (Jumlah Kirim > 0) { mPartID += 1; // div_message.innerHTML += ( + xmlhttp.ResponseText) ; var p = Math.floor((mPartID/(Math.ceil(ado_stream.size/BlockSize) + 1)) * 100) ; // Hitung persentase kemajuanShowBar(p) ; );, 1) ; } else { // Transfer file selesai //div_message.innerHTML += mFileName + Transfer selesai! ;</P><P> // Lanjutkan meneruskan file berikutnya ShowBar(0) ; var cFile = aryFiles.pop() ; SendFile(cFile) } } </P><P> }</P>< P > function ShowBar(per) { // Bilah kemajuan ddd.innerHTML = <lebar tabel='200' border=0 cellpadding='0' Cellspacing='0' ><tr><td bgcolor='#6699FF'><tipe masukan=button style=' lebar: + per + % ; batas:0px; latar belakang:#005599; warna:#FFFFFF' nilai= + per + %> </td></tr ></tabel> ; }</P><P></skrip></html></P><P>
sisi server
</P><P><%@ LANGUAGE=VBScript%><% Option ExplicitResponse.Expires = 0 </P><P>' Mendefinisikan variabel dan objek. dim ado_streamdim xml_domdim xml_datadim str_filenamedim bol_PartStartdim int_PartIDdim bol_PartEnd </P><P>' Buat kumpulan objek Aliran ado_stream = Server.CreateObject(ADODB.Stream)' Buat objek XMLDOM dari kumpulan objek Permintaan xml_dom = Server.CreateObject(MSXML2.DOMDocument)xml_dom.load(request)' Bacakan node yang berisi kumpulan data biner xml_data = xml_dom.selectSingleNode(root/upData)str_filename = xml_data.getAttribute(FileName)bol_PartStart = CBool(xml_data.getAttribute(PartStart ))int_PartID = CInt(xml_data.getAttribute(PartID))bol_PartEnd = CBool(xml_data.getAttribute(PartEnd))</P><P>' Buka objek Stream dan simpan data di dalamnya ado_stream.Type = 1 ' 1=adTypeBinary ado_stream.open jika bukan bol_PartStart maka ado_stream.LoadFromFile(server.mappath(.) &/& + str_filename) ' Baca file ado_stream.position = ado_stream.sizeend ifado_stream.Write xml_data.nodeTypedValue' File simpan ado_stream.SaveToFile server.mappath(.) &/& str_filename,2'Simpan file 2=adSaveCreateOverWrite ado_stream.close </P><P> 'Rilis kumpulan sumber daya ado_stream = Tidak ada set xml_dom = Tidak ada' Kembalikan informasi ke browser Response.Write Upload berhasil!& str_filename & int_PartID & bol_PartStart%> </P><P>