Mengunggah dan mengunduh file adalah teknologi yang sering kita perlukan dalam proses pengembangan proyek yang sebenarnya. Berikut beberapa metode umum yang terdapat dalam artikel ini:
1. Cara mengatasi batas ukuran upload file
2. Simpan ke server sebagai file
3. Konversikan ke aliran byte biner dan simpan ke database dan metode pengunduhan
4. Unggah sumber daya di Internet
Bagian 1:
Pertama, mari kita bahas cara mengatasi masalah batas ukuran unggahan file di ASP.NET. Kita tahu bahwa secara default, batas ukuran unggahan file di ASP.NET adalah 2M. File konfigurasi. Ukuran file maksimum adalah sebagai berikut:
<httpRuntime eksekusiTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>Dengan cara ini, nilai maksimum file yang diunggah menjadi 4M, tetapi ini tidak memungkinkan kami untuk memperluas nilai MaxRequestLength tanpa batas, karena ASP. NET akan Setelah semua file dimuat ke dalam memori, mereka diproses. Solusinya adalah dengan menggunakan HttpWorkerRequest implisit dan menggunakan metode GetPreloadedEntityBody dan ReadEntityBody untuk membaca data dalam potongan dari pipa yang dibuat oleh IIS untuk ASP.NET. Cara pelaksanaannya adalah sebagai berikut:
IServiceProviderprovider=(IServiceProvider)HttpContext.Saat ini;
HttpWorkerRequestwr=(HttpWorkerRequest)penyedia.GetService(typeof(HttpWorkerRequest));
byte[]bs=wr.GetPreloadedEntityBody();
.
if(!wr.IsEntireEntityBodyIsPreloaded())
{
intn=1024;
byte[]bs2=byte baru[n];
while(wr.ReadEntityBody(bs2,n)>0)
{
..
}
}Ini akan menyelesaikan masalah pengunggahan file besar.
Bagian 2:
Selanjutnya kami akan memperkenalkan cara mengunggah file dari klien ke server dalam bentuk file dan mengembalikan beberapa informasi dasar tentang file yang diunggah. Pertama, kami mendefinisikan kelas untuk menyimpan informasi tentang file yang diunggah (diperlukan saat kembali) .
FileUpLoad kelas publik
{
Pengunggahan File publik()
{
}
/**//// <ringkasan>
/// Unggah nama file
/// </ringkasan>
Nama File string publik
{
mendapatkan
{
kembalikan Nama file;
}
mengatur
{
namafile = nilai;
}
}
nama file string pribadi;
/**//// <ringkasan>
/// Unggah jalur file
/// </ringkasan>
FilePath string publik
{
mendapatkan
{
kembalikan jalur file;
}
mengatur
{
jalur file = nilai;
}
}
jalur file string pribadi;
/**//// <ringkasan>
/// Ekstensi file
/// </ringkasan>
Ekstensi File string publik
{
mendapatkan
{
kembalikan ekstensi file;
}
mengatur
{
ekstensi file = nilai;
}
}
ekstensi file string pribadi;
}
Selain itu, kita juga dapat membatasi format file yang diupload pada file konfigurasi (App.Config):
<?xml versi="1.0" pengkodean="gb2312" ?>
<Aplikasi>
<FileUpLoad>
<Format>.jpg|.gif|.png|.bmp</Format>
</FileUpLoad>
</Aplikasi>
Dengan cara ini kita bisa mulai menulis metode upload file kita, sebagai berikut:
FileUpLoad publik UpLoadFile(HtmlInputFile InputFile,string filePath,string Namafilesaya,bool isRandom)
{
FileUpLoad fp = FileUpLoad baru();
string Namafile,Ekstensi file;
string simpanNama;
//
//Buat objek unggahan
//
HttpPostedFile dipostingFile = InputFile.PostedFile;
fileName = Sistem.IO.Path.GetFileName(postedFile.FileName);
fileExtension = System.IO.Path.GetExtension(namafile);
//
//Menentukan format file berdasarkan jenisnya
//
Aplikasi AppConfig = AppConfig baru();
format string = app.GetPath("FileUpLoad/Format");
//
//Jika formatnya tidak cocok, kembalikan
//
if(format.IndexOf(Ekstensi file)==-1)
{
throw new ApplicationException("Format data yang diunggah adalah ilegal");
}
//
//Hasilkan nama file acak berdasarkan tanggal dan nomor acak
//
if(Namafilesaya!= string.Kosong)
{
Namafile = Namafilesaya;
}
if(acak)
{
ObjRand acak = Acak baru();
System.DateTime date = DateTime.Sekarang;
//Hasilkan nama file acak
saveName = tanggal.Tahun.ToString() + tanggal.Bulan.ToString() + tanggal.Hari.ToString() + tanggal.Jam.ToString() + tanggal.Menit.ToString()
+ tanggal.Kedua.ToString() + Konversi.ToString(objRand.Berikutnya(99)*97 + 100);
nama file = nama simpan + ekstensi file;
}
string phyPath = HttpContext.Saat ini.Permintaan.MapPath(filePath);
//Tentukan apakah jalurnya ada, jika tidak, buat jalurnya
DirectoryInfo upDir = DirectoryInfo baru(phyPath);
if(!upDir.Ada)
{
upDir.Buat();
}
//
//simpan berkas
//
mencoba
{
dipostingFile.SaveAs(phyPath + Nama file);
fp.FilePath = filePath + Nama file;
fp.FileExtension = ekstensi file;
fp.NamaFile = Namafile;
}
menangkap
{
throw new ApplicationException("Upload gagal!");
}
//Kembalikan informasi file yang diunggah
kembalikan fp;
}
Kemudian kita dapat memanggil metode ini saat mengunggah file, dan menyimpan informasi file yang dikembalikan ke database. Sedangkan untuk mengunduh, cukup buka jalurnya secara langsung dan semuanya akan baik-baik saja.
Bagian Ketiga:
Di sini kita terutama berbicara tentang cara mengunggah dan mengunduh file dalam bentuk biner. Pertama mari kita bahas tentang cara upload.
byte publik[] UpLoadFile(HtmlInputFile f_IFile)
{
//Dapatkan akses ke file unggahan yang ditentukan oleh klien
HttpPostedFile upFile=f_IFile.PostedFile;
//Dapatkan panjang file yang diunggah
int upFileLength=upFile.ContentLength;
//Dapatkan tipe MIME klien dari file yang diunggah
string tipe konten = upFile.ContentType;
byte[] FileArray=Byte baru[upFileLength];
Aliran fileStream=upFile.InputStream;
fileStream.Read(FileArray,0,upFileLength);
}Metode ini mengembalikan aliran byte biner dari file yang diunggah, sehingga kita dapat menyimpannya ke database. Mari kita bicara tentang bentuk pengunduhan ini. Anda mungkin berpikir bahwa pengunduhan dengan cara ini adalah dengan membuat halaman aspx baru, lalu mengeluarkan aliran byte biner di acara Page_Load(), dan kemudian membacanya tidak disarankan. Dalam penerapan sebenarnya, mungkin ada kesalahan yang tidak dapat membuka situs tertentu. Saya biasanya menggunakan metode berikut:
Pertama, tambahkan: ke Web.config:
<tambahkan kata kerja = "*" path = "openfile.aspx" type = "RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
Artinya ketika saya membuka halaman openfile.aspx, sistem akan secara otomatis mengeksekusi metode di kelas RuixinOA.Web.BaseClass.OpenFile. Implementasi spesifiknya adalah sebagai berikut:
menggunakan Sistem;
menggunakan Sistem.Data;
menggunakan Sistem.Web;
menggunakan Sistem.IO;
menggunakan Ruixin.WorkFlowDB;
menggunakanRXSuite.Base;
menggunakanRXSuite.Component;
menggunakan RuixinOA.BusinessFacade;
ruang nama RuixinOA.Web.BaseClass
{
/**//// <ringkasan>
/// Ringkasan deskripsi NetUFile.
/// </ringkasan>
OpenFile kelas publik : IHttpHandler
{
Permintaan Proses kekosongan publik (konteks HttpContext)
{
//Dapatkan informasi file yang akan diunduh dari database
RuixinOA.BusinessFacade.RX_OA_FileManager os = RX_OA_FileManager() baru;
EntityData data = os.GetFileDetail(id);
if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)
{
DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];
konteks.Response.Buffer = true;
konteks.Respon.Hapus();
konteks.Response.ContentType = dr["CContentType"].ToString();
konteks.Response.AddHeader("Disposisi Konten","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
konteks.Respon.BinaryWrite((Byte[])dr["CContent"]);
konteks.Respon.Flush();
konteks.Respon.End();
}
}
bool publik Dapat Digunakan Kembali
{
dapatkan { kembalikan benar;}
}
}
}
Setelah menjalankan cara di atas, sistem akan meminta pengguna untuk memilih membuka langsung atau mengunduh. Itu saja untuk bagian ini.
Bagian 4:
Bagian ini terutama membahas tentang cara mengunggah sumber daya di Internet ke server. Kami memiliki artikel sebelumnya yang merinci cara menggunakannya, jadi saya tidak akan menjelaskan lebih lanjut di sini.
Silakan merujuk ke: Mengubah halaman dinamis menjadi aliran byte biner
Bagian 5: Ringkasan
Hari ini saya memperkenalkan secara singkat beberapa metode pengunggahan dan pengunduhan file, yang sering digunakan dalam pengembangan proyek sebenarnya. Mohon koreksi saya jika saya menulis dengan buruk, terima kasih!
Surel:[email protected]