Aracılığıyla paylaş


ASP.NET Web Sayfaları (Razor) Sitesinde Dosyalarla Çalışma

yazan: Tom FitzMacken

Bu makalede, ASP.NET Web Sayfaları (Razor) sitesinde dosyaları okuma, yazma, ekleme, silme ve karşıya yükleme açıklanmaktadır.

Not

Görüntüleri karşıya yüklemek ve işlemek (örneğin, çevirme veya yeniden boyutlandırma) istiyorsanız bkz. ASP.NET Web Sayfaları Sitesinde Resimlerle Çalışma.

Öğrenecekleriniz:

  • Metin dosyası oluşturma ve dosyaya veri yazma.
  • Mevcut bir dosyaya veri ekleme.
  • Bir dosyayı okuma ve dosyadan görüntüleme.
  • Web sitesinden dosya silme.
  • Kullanıcıların bir veya birden çok dosyayı karşıya yüklemesine izin verme.

Makalede sunulan ASP.NET programlama özellikleri şunlardır:

  • File Dosyaları yönetmek için bir yol sağlayan nesnesi.
  • Yardımcı FileUpload .
  • Yolu Path ve dosya adlarını işlemenize olanak tanıyan yöntemler sağlayan nesnesi.

Öğreticide kullanılan yazılım sürümleri

  • ASP.NET Web Sayfaları (Razor) 2
  • WebMatrix 2

Bu öğretici, WebMatrix 3 ile de çalışır.

Metin Dosyası Oluşturma ve Dosyaya Veri Yazma

Web sitenizde veritabanı kullanmanın yanı sıra dosyalarla da çalışabilirsiniz. Örneğin, metin dosyalarını sitenin verilerini depolamak için basit bir yol olarak kullanabilirsiniz. (Verileri depolamak için kullanılan metin dosyasına bazen düz dosya adı verilir.) Metin dosyaları .txt,.xmlveya .csv (virgülle ayrılmış değerler) gibi farklı biçimlerde olabilir.

Verileri bir metin dosyasında depolamak istiyorsanız, oluşturulacak dosyayı ve yazılacak verileri belirtmek için yöntemini kullanabilirsiniz File.WriteAllText . Bu yordamda, üç input öğe (ad, soyadı ve e-posta adresi) ve gönder düğmesi içeren basit bir form içeren bir sayfa oluşturacaksınız. Kullanıcı formu gönderdiğinde, kullanıcının girişini bir metin dosyasında depolayacaksınız.

  1. Henüz yoksa App_Data adlı yeni bir klasör oluşturun.

  2. Web sitenizin kökünde UserData.cshtml adlı yeni bir dosya oluşturun.

  3. Mevcut içeriği aşağıdakilerle değiştirin:

    @{
        var result = "";
        if (IsPost)
        {
            var firstName = Request["FirstName"];
            var lastName = Request["LastName"];
            var email = Request["Email"];
    
            var userData = firstName + "," + lastName +
                "," + email + Environment.NewLine;
    
            var dataFile = Server.MapPath("~/App_Data/data.txt");
            File.WriteAllText(@dataFile, userData);
            result = "Information saved.";
        }
    }
    <!DOCTYPE html>
    <html>
    <head>
        <title>Write Data to a File</title>
    </head>
    <body>
        <form id="form1" method="post">
        <div>
            <table>
                <tr>
                    <td>First Name:</td>
                    <td><input id="FirstName" name="FirstName" type="text" /></td>
    
                </tr>
                <tr>
                    <td>Last Name:</td>
                    <td><input id="LastName" name="LastName" type="text" /></td>
                </tr>
                <tr>
                    <td>Email:</td>
                    <td><input id="Email" name="Email" type="text" /></td>
                </tr>
                <tr>
                    <td></td>
                    <td><input type="submit" value="Submit"/></td>
                </tr>
            </table>
        </div>
        <div>
        @if(result != ""){
            <p>Result: @result</p>
        }
        </div>
        </form>
    </body>
    </html>
    

    HTML işaretlemesi, formu üç metin kutusuyla oluşturur. Kodda, işlemeye başlamadan önce sayfanın gönderilip gönderilmediğini belirlemek için özelliğini kullanırsınız IsPost .

    İlk görev, kullanıcı girişini almak ve bunu değişkenlere atamaktır. Kod daha sonra ayrı değişkenlerin değerlerini virgülle ayrılmış bir dizede birleştirir ve daha sonra farklı bir değişkende depolanır. Virgül ayırıcısının tırnak işaretleri (",") içinde yer alan bir dize olduğuna dikkat edin, çünkü oluşturduğunuz büyük dizeye tam olarak virgül eklersiniz. Birlikte birleştirdiğiniz verilerin sonuna öğesini eklersiniz Environment.NewLine. Bu bir satır sonu (yeni satır karakteri) ekler. Tüm bu birleştirme ile oluşturduğunuz şey aşağıdakine benzer bir dizedir:

    David,Jones,davidj@contoso.com
    

    (Sonunda görünmez bir satır sonu ile.)

    Ardından, verileri depoladığınız dosyanın konumunu ve adını içeren bir değişken (dataFile) oluşturursunuz. Konumu ayarlamak için özel bir işleme gerekir. Web sitelerinde, kodu web sunucusundaki dosyalar için C:\Folder\File.txt gibi mutlak yollara başvurmak kötü bir uygulamadır. Bir web sitesi taşınırsa mutlak yol yanlış olur. Ayrıca, barındırılan bir site için (kendi bilgisayarınızda değil) genellikle kodu yazarken doğru yolun ne olduğunu bile bilmezsiniz.

    Ancak bazen (şimdi olduğu gibi, bir dosya yazmak için) tam bir yola ihtiyacınız vardır. Çözüm, nesnesinin MapPath yöntemini kullanmaktır Server . Bu, web sitenizin tam yolunu döndürür. Web sitesi kökünün yolunu almak için işlecini (sitenin ~ sanal kökünü yeniden kullanmak için) olarak MapPathkullanacaksınız. (Alt klasörün yolunu almak için buna ~/App_Data/ gibi bir alt klasör adı da geçirebilirsiniz.) Ardından, tam bir yol oluşturmak için yöntemin döndürdüğü ek bilgileri birleştirebilirsiniz. Bu örnekte bir dosya adı ekleyebilirsiniz. ( Razor Söz Dizimini Kullanarak ASP.NET Web Sayfaları Programlamaya Giriş bölümünde dosya ve klasör yollarıyla çalışma hakkında daha fazla bilgi edinebilirsiniz.)

    Dosya App_Data klasörüne kaydedilir. Bu klasör, ASP.NET Web Sayfaları Sitelerinde Veritabanıyla Çalışmaya Giriş bölümünde açıklandığı gibi, veri dosyalarını depolamak için kullanılan ASP.NET özel bir klasördür.

    WriteAllText nesnesinin File yöntemi verileri dosyaya yazar. Bu yöntem iki parametre alır: yazacak dosyanın adı (yolu ile) ve yazacak gerçek veriler. İlk parametrenin adının ön ek olarak bir @ karaktere sahip olduğuna dikkat edin. Bu, ASP.NET bir düz metin dizesi değişmez değeri sağladığınızı ve "/" gibi karakterlerin özel şekillerde yorumlanmaması gerektiğini bildirir. (Daha fazla bilgi için bkz. Razor Söz Dizimini Kullanarak ASP.NET Web Programlamaya Giriş.)

    Not

    Kodunuzun dosyaları App_Data klasörüne kaydetmesi için uygulamanın bu klasör için okuma-yazma izinlerine sahip olması gerekir. Geliştirme bilgisayarınızda bu genellikle bir sorun değildir. Ancak, sitenizi bir barındırma sağlayıcısının web sunucusunda yayımladığınızda, bu izinleri açıkça ayarlamanız gerekebilir. Bu kodu bir barındırma sağlayıcısının sunucusunda çalıştırır ve hata alırsanız, bu izinleri nasıl ayarlayabileceğinizi öğrenmek için barındırma sağlayıcısına başvurun.

  • Sayfayı tarayıcıda çalıştırın.

    Ad, Soyadı ve Email metin alanlarının ardından Gönder düğmesinin gösterildiği tarayıcı penceresinin ekran görüntüsü.

  • Alanlara değerleri girin ve Gönder'e tıklayın.

  • Tarayıcıyı kapatın.

  • Projeye dönün ve görünümü yenileyin.

  • data.txt dosyasını açın. Forma gönderdiğiniz veriler dosyadadır.

    Web tarayıcısı alanlarına girilen verilerin t x t dosyasına kaydedildiğini gösteren data dot t t dosyasının ekran görüntüsü.

  • data.txt dosyasını kapatın.

Varolan Bir Dosyaya Veri Ekleme

Önceki örnekte, içinde yalnızca bir veri parçası olan bir metin dosyası oluşturursunuz WriteAllText . yöntemini yeniden çağırır ve aynı dosya adını geçirirseniz, var olan dosyanın üzerine tamamen yazılır. Ancak, bir dosya oluşturduktan sonra genellikle dosyanın sonuna yeni veriler eklemek istersiniz. Bunu nesnesinin AppendAllText yöntemini File kullanarak yapabilirsiniz.

  1. Web sitesinde UserData.cshtml dosyasının bir kopyasını oluşturun ve kopyayı UserDataMultiple.cshtml olarak adlandırın.

  2. Açma <!DOCTYPE html> etiketinden önceki kod bloğunu aşağıdaki kod bloğuyla değiştirin:

    @{
        var result = "";
        if (IsPost)
        {
            var firstName = Request["FirstName"];
            var lastName = Request["LastName"];
            var email = Request["Email"];
    
            var userData = firstName + "," + lastName +
                "," + email + Environment.NewLine;
    
            var dataFile = Server.MapPath("~/App_Data/data.txt");
            File.AppendAllText (@dataFile, userData);
            result = "Information saved.";
        }
    }
    

    Bu kodda önceki örnekten bir değişiklik var. kullanmak yerine WriteAllTextyöntemini kullanır the AppendAllText . Yöntemleri benzerdir, ancak AppendAllText verileri dosyanın sonuna ekler. 'WriteAllTextAppendAllTextde olduğu gibi, henüz yoksa dosyayı oluşturur.

  3. Sayfayı tarayıcıda çalıştırın.

  4. Alanların değerlerini girin ve Gönder'e tıklayın.

  5. Daha fazla veri ekleyin ve formu yeniden gönderin.

  6. Projenize dönün, proje klasörüne sağ tıklayın ve ardından Yenile'ye tıklayın.

  7. data.txt dosyasını açın. Şimdi girdiğiniz yeni verileri içerir.

    Web tarayıcısı alanlarına girilen verilerin önceki verilerin üzerine yazılmadan kaydedildiğini gösteren data dot t x t dosyasının ekran görüntüsü.

Dosyadan Veri Okuma ve Görüntüleme

Metin dosyasına veri yazmanız gerekmeyecek olsa bile, bazen bir dosyadan veri okumanız gerekebilir. Bunu yapmak için nesnesini yeniden kullanabilirsiniz File . Nesneyi kullanarak her satırı tek tek okuyabilir (satır sonları ile ayırarak) veya öğeyi nasıl ayrılırlarsa ayırsınlar tek tek okuyabilirsiniz File .

Bu yordamda, önceki örnekte oluşturduğunuz verilerin nasıl okunduğu ve görüntüleneceği gösterilir.

  1. Web sitenizin kökünde DisplayData.cshtml adlı yeni bir dosya oluşturun.

  2. Mevcut içeriği aşağıdakilerle değiştirin:

    @{
        var result = "";
        Array userData = null;
        char[] delimiterChar = {','};
    
        var dataFile = Server.MapPath("~/App_Data/data.txt");
    
        if (File.Exists(dataFile)) {
            userData = File.ReadAllLines(dataFile);
            if (userData == null) {
                // Empty file.
                result = "The file is empty.";
            }
        }
        else {
            // File does not exist.
            result = "The file does not exist.";
        }
    }
    <!DOCTYPE html>
    
    <html>
    <head>
        <title>Reading Data from a File</title>
    </head>
    <body>
        <div>
            <h1>Reading Data from a File</h1>
            @result
            @if (result == "") {
                <ol>
                @foreach (string dataLine in userData) {
                <li>
                    User
                    <ul>
                    @foreach (string dataItem in dataLine.Split(delimiterChar)) {
                        <li>@dataItem</li >
                    }
                    </ul>
                </li>
                }
                </ol>
            }
        </div>
    </body>
    </html>
    

    Kod, önceki örnekte oluşturduğunuz dosyayı adlı userDatabir değişkene okuyarak başlar ve bu yöntem çağrısını kullanarak:

    File.ReadAllLines(dataFile)
    

    Bunu yapmak için kod bir if deyiminin içindedir. Bir dosyayı okumak istediğinizde, önce dosyanın kullanılabilir olup olmadığını belirlemek için yöntemini kullanmak File.Exists iyi bir fikirdir. Kod ayrıca dosyanın boş olup olmadığını denetler.

    Sayfanın gövdesi, biri diğerinin içinde iç içe yerleştirilmiş iki foreach döngü içerir. Dış foreach döngü, veri dosyasından bir kerede bir satır alır. Bu durumda, satırlar dosyadaki satır sonları tarafından tanımlanır; diğer bir deyişle, her veri öğesi kendi satırındadır. Dış döngü, sıralı bir liste (<li> öğe) içinde yeni bir öğe (<ol> öğesi) oluşturur.

    İç döngü, sınırlayıcı olarak virgül kullanarak her veri satırını öğelere (alanlara) böler. (Önceki örnekten yola çıkarak bu, her satırın üç alan içerdiği anlamına gelir: ad, soyadı ve her biri virgülle ayrılmış e-posta adresi.) İç döngü ayrıca bir <ul> liste oluşturur ve veri satırındaki her alan için bir liste öğesi görüntüler.

    Kod, bir dizi ve char veri türü olmak üzere iki veri türünün nasıl kullanılacağını gösterir. yöntemi verileri dizi olarak döndürdüğünden File.ReadAllLines dizi gereklidir. char yöntemi her öğenin türünde olduğu bir array döndürdüğünden Split veri türü chargereklidir. (Diziler hakkında bilgi için bkz. Razor Söz Dizimini Kullanarak ASP.NET Web Programlamaya Giriş.)

  3. Sayfayı tarayıcıda çalıştırın. Önceki örnekler için girdiğiniz veriler görüntülenir.

    Dizide görüntülenen data dot t x t dosyasındaki verilerden verileri gösteren tarayıcı penceresinin ekran görüntüsü.

İpucu

Microsoft Excel Comma-Delimited Dosyasındaki Verileri Görüntüleme

Elektronik tablodaki verileri virgülle ayrılmış dosya (.csv dosyası) olarak kaydetmek için Microsoft Excel'i kullanabilirsiniz. Bunu yaptığınızda, dosya Excel biçiminde değil düz metin olarak kaydedilir. Elektronik tablodaki her satır, metin dosyasındaki bir satır sonuyla ayrılır ve her veri öğesi virgülle ayrılır. Önceki örnekte gösterilen kodu, yalnızca kodunuzdaki veri dosyasının adını değiştirerek Excel virgülle ayrılmış bir dosyayı okumak için kullanabilirsiniz.

Dosyaları Silme

Web sitenizden dosya silmek için yöntemini kullanabilirsiniz File.Delete . Bu yordam, kullanıcıların dosyanın adını biliyorlarsa görüntülerin klasöründen bir görüntüyü (.jpg dosya) silmesine nasıl izin vereceğinizi gösterir.

Not

Önemli Üretim web sitesinde genellikle verilerde değişiklik yapma izni olan kullanıcıları kısıtlarsınız. Üyeliği ayarlama ve kullanıcıları sitedeki görevleri gerçekleştirmeye yetkilendirme yolları hakkında bilgi için bkz. ASP.NET Web Sayfaları Sitesine Güvenlik ve Üyelik Ekleme.

  1. Web sitesinde images adlı bir alt klasör oluşturun.

  2. Images klasörüne bir veya daha fazla .jpg dosyası kopyalayın.

  3. Web sitesinin kökünde FileDelete.cshtml adlı yeni bir dosya oluşturun.

  4. Mevcut içeriği aşağıdakilerle değiştirin:

    @{
        bool deleteSuccess = false;
        var photoName = "";
        if (IsPost) {
            photoName = Request["photoFileName"] + ".jpg";
            var fullPath = Server.MapPath("~/images/" + photoName);
    
            if (File.Exists(fullPath))
            {
                    File.Delete(fullPath);
                    deleteSuccess = true;
            }
        }
    }
    <!DOCTYPE html>
    <html>
      <head>
        <title>Delete a Photo</title>
      </head>
      <body>
        <h1>Delete a Photo from the Site</h1>
        <form name="deletePhoto" action="" method="post">
          <p>File name of image to delete (without .jpg extension):
          <input name="photoFileName" type="text" value="" />
          </p>
          <p><input type="submit" value="Submit" /></p>
        </form>
    
        @if(deleteSuccess) {
            <p>
            @photoName deleted!
            </p>
            }
      </body>
    </html>
    

    Bu sayfa, kullanıcıların görüntü dosyasının adını girebileceği bir form içerir. .jpg dosya adı uzantısını girmez; dosya adını bu şekilde kısıtlayarak, kullanıcıların sitenizdeki rastgele dosyaları silmesini önlemeye yardımcı olursunuz.

    Kod, kullanıcının girdiği dosya adını okur ve ardından tam bir yol oluşturur. Yolu oluşturmak için kod geçerli web sitesi yolunu (yöntemi tarafından Server.MapPath döndürülen şekilde), images klasör adını, kullanıcının sağladığı adı ve değişmez değer dizesi olarak ".jpg" kullanır.

    Dosyayı silmek için kod yöntemini çağırarak File.Delete az önce oluşturduğunuz tam yolu geçirir. İşaretlemeyi tamamlayan kod, dosyanın silindiğini belirten bir onay iletisi görüntüler.

  5. Sayfayı tarayıcıda çalıştırın.

    Dosya adı için bir alan ve Gönder düğmesini içeren Site sayfasından Fotoğraf Sil'i gösteren tarayıcı penceresinin ekran görüntüsü.

  6. Silinecek dosyanın adını girin ve Gönder'e tıklayın. Dosya silindiyse, dosyanın adı sayfanın en altında görüntülenir.

Kullanıcıların Dosya Yüklemesine izin verme

Yardımcı, FileUpload kullanıcıların web sitenize dosya yüklemesine olanak tanır. Aşağıdaki yordamda kullanıcıların tek bir dosyayı karşıya yüklemesine nasıl izin verileceği gösterilmektedir.

  1. ASP.NET Web Yardımcıları Kitaplığı'nı, daha önce eklemediyseniz , ASP.NET Web Sayfaları Sitesine Yardımcı Yükleme bölümünde açıklandığı gibi web sitenize ekleyin.

  2. App_Data klasöründe yeni bir klasör oluşturun ve UploadedFiles olarak adlandırın.

  3. Kökte FileUpload.cshtml adlı yeni bir dosya oluşturun.

  4. Sayfadaki mevcut içeriği aşağıdakilerle değiştirin:

    @using Microsoft.Web.Helpers;
    @{
        var fileName = "";
        if (IsPost) {
            var fileSavePath = "";
            var uploadedFile = Request.Files[0];
            fileName = Path.GetFileName(uploadedFile.FileName);
            fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" +
              fileName);
            uploadedFile.SaveAs(fileSavePath);
        }
    }
    <!DOCTYPE html>
    <html>
        <head>
        <title>FileUpload - Single-File Example</title>
        </head>
        <body>
        <h1>FileUpload - Single-File Example</h1>
        @FileUpload.GetHtml(
            initialNumberOfFiles:1,
            allowMoreFilesToBeAdded:false,
            includeFormTag:true,
            uploadText:"Upload")
        @if (IsPost) {
            <span>File uploaded!</span><br/>
        }
        </body>
    </html>
    

    Sayfanın gövde bölümü, karşıya yükleme kutusunu ve büyük olasılıkla aşina olduğunuz düğmeleri oluşturmak için yardımcıyı kullanır FileUpload :

    Dosya Karşıya Yükleme yardımcı dosya seçicisini ve Karşıya Yükle düğmesini gösteren Dosya Yükleme web tarayıcısı sayfasının ekran görüntüsü.

    Yardımcı için ayarladığınız özellikler, dosyanın karşıya yüklenmesi için FileUpload tek bir kutu istediğinizi ve gönder düğmesinin Karşıya Yükle'yi okumasını istediğinizi belirtir. (Makalenin ilerleyen bölümlerinde daha fazla kutu ekleyeceksiniz.)

    Kullanıcı Karşıya Yükle'ye tıkladığında, sayfanın üst kısmındaki kod dosyayı alır ve kaydeder. Request Normalde form alanlarından değer almak için kullandığınız nesnenin karşıya yüklenen dosyayı (veya dosyaları) içeren bir Files dizisi de vardır. Tek tek dosyaları dizideki belirli konumlardan alabilirsiniz; örneğin, karşıya yüklenen ilk dosyayı almak için, Request.Files[0]ikinci dosyayı almak için , vb. alırsınız Request.Files[1]. (Programlamada sayım genellikle sıfırdan başlar.)

    Karşıya yüklenen bir dosyayı getirdiğinizde, işlemek için bir değişkene (burada, uploadedFile) yerleştirirsiniz. Karşıya yüklenen dosyanın adını belirlemek için yalnızca özelliğini FileName alırsınız. Ancak, kullanıcı bir dosyayı karşıya yüklediğinde, FileName yolun tamamını içeren kullanıcının özgün adını içerir. Şu şekilde görünebilir:

    C:\Users\Public\Sample.txt

    Ancak tüm bu yol bilgilerini istemezsiniz, çünkü sunucunuzun değil kullanıcının bilgisayarındaki yol budur. Yalnızca gerçek dosya adını (Sample.txt) istiyorsunuz. Yöntemini kullanarak Path.GetFileName bir yoldan yalnızca dosyayı çıkarabilirsiniz, örneğin:

    Path.GetFileName(uploadedFile.FileName)
    

    Path nesnesi, yolların şeritlemesi, yolları birleştirmesi vb. için kullanabileceğiniz bunun gibi bir dizi yöntemi olan bir yardımcı programdır.

    Karşıya yüklenen dosyanın adını aldıktan sonra, karşıya yüklenen dosyayı web sitenizde depolamak istediğiniz yer için yeni bir yol oluşturabilirsiniz. Bu durumda, klasör adlarını (App_Data/UploadedFiles) ve yeni kaldırılan dosya adını birleştirerek Server.MapPathyeni bir yol oluşturursunuz. Ardından karşıya yüklenen dosyanın SaveAs yöntemini çağırarak dosyayı kaydedebilirsiniz.

  5. Sayfayı tarayıcıda çalıştırın.

    Dosya seçiciyi ve Karşıya Yükle düğmesini gösteren Dosya Karşıya Yükleme Tek Dosya Örneği web tarayıcısı sayfasının ekran görüntüsü.

  6. Gözat'a tıklayın ve karşıya yüklenecek dosyayı seçin.

    Mavi renkle seçili ve vurgulanmış bir dosyayı ve mavi dikdörtgende vurgulanmış Aç düğmesini gösteren Dosya Gezgini penceresinin ekran görüntüsü.

    Gözat düğmesinin yanındaki metin kutusu yolu ve dosya konumunu içerir.

    Seçili dosya ve Karşıya Yükle düğmesini içeren dosya seçiciyi gösteren Dosya Karşıya Yükleme Tek Dosya Örneği web tarayıcısı sayfasının ekran görüntüsü.

  7. Karşıya Yükle'ye tıklayın.

  8. Web sitesinde proje klasörüne sağ tıklayın ve ardından Yenile'ye tıklayın.

  9. UploadedFiles klasörünü açın. Karşıya yüklediğiniz dosya klasördedir.

    Karşıya Yüklenen Dosyalar klasörünün içinde mavi renkle vurgulanan Örnekler nokta t x t dosyasını gösteren proje klasörü hiyerarşisinin ekran görüntüsü.

Kullanıcıların birden çok dosya yüklemesine izin verme

Önceki örnekte, kullanıcıların bir dosyayı karşıya yüklemesine izin verirsiniz. Ancak, bir kerede FileUpload birden fazla dosyayı karşıya yüklemek için yardımcıyı kullanabilirsiniz. Bu, bir kerede bir dosya yüklemenin yorucu olduğu fotoğrafları karşıya yükleme gibi senaryolar için kullanışlıdır. (ASP.NET Web Sayfaları Sitesinde Resimlerle Çalışma bölümünde fotoğraf yükleme hakkında bilgi edinebilirsiniz.) Bu örnekte, kullanıcıların aynı anda iki tane yüklemesine nasıl izin verebileceğiniz gösterilmektedir, ancak bundan daha fazlasını karşıya yüklemek için aynı tekniği kullanabilirsiniz.

  1. Henüz yapmadıysanız, ASP.NET Web Sayfaları Sitesine Yardımcı Yükleme bölümünde açıklandığı gibi web sitenize ASP.NET Web Yardımcıları Kitaplığı'nı ekleyin.

  2. FileUploadMultiple.cshtml adlı yeni bir sayfa oluşturun.

  3. Sayfadaki mevcut içeriği aşağıdakilerle değiştirin:

    @using Microsoft.Web.Helpers;
    @{
      var message = "";
      if (IsPost) {
          var fileName = "";
          var fileSavePath = "";
          int numFiles = Request.Files.Count;
          int uploadedCount = 0;
          for(int i =0; i < numFiles; i++) {
              var uploadedFile = Request.Files[i];
              if (uploadedFile.ContentLength > 0) {
                  fileName = Path.GetFileName(uploadedFile.FileName);
                  fileSavePath = Server.MapPath("~/App_Data/UploadedFiles/" +
                    fileName);
                  uploadedFile.SaveAs(fileSavePath);
                  uploadedCount++;
              }
           }
           message = "File upload complete. Total files uploaded: " +
             uploadedCount.ToString();
       }
    }
    <!DOCTYPE html>
    <html>
        <head><title>FileUpload - Multiple File Example</title></head>
    <body>
        <form id="myForm" method="post"
           enctype="multipart/form-data"
           action="">
        <div>
        <h1>File Upload - Multiple-File Example</h1>
        @if (!IsPost) {
            @FileUpload.GetHtml(
                initialNumberOfFiles:2,
                allowMoreFilesToBeAdded:true,
                includeFormTag:true,
                addText:"Add another file",
                uploadText:"Upload")
            }
        <span>@message</span>
        </div>
        </form>
    </body>
    </html>
    

    Bu örnekte, sayfanın gövdesindeki yardımcı, FileUpload kullanıcıların varsayılan olarak iki dosyayı karşıya yüklemesine izin verecek şekilde yapılandırılmıştır. allowMoreFilesToBeAdded olarak ayarlandığındantrue, yardımcı kullanıcının daha fazla karşıya yükleme kutusu eklemesine olanak tanıyan bir bağlantı oluşturur:

    İki dosya seçiciyi ve karşıya yükle düğmesini gösteren Dosya Yükleme Birden Çok Dosya Örneği web tarayıcısı sayfasının ekran görüntüsü.

    Kullanıcının karşıya yüklediği dosyaları işlemek için kod, önceki örnekte kullandığınız temel tekniği kullanır; dosyasından Request.Files bir dosya alın ve dosyayı kaydedin. (Doğru dosya adını ve yolunu almak için yapmanız gereken çeşitli işlemler dahil.) Bu kez yapılan yenilik, kullanıcının birden çok dosya yükleyebileceği ve çok fazla dosya bilmediğinizdir. Öğrenmek için alabilirsiniz Request.Files.Count.

    Bu sayı elde olduğunda, içinde Request.Filesdöngü yapabilir, her dosyayı sırayla getirebilir ve kaydedebilirsiniz. Bir koleksiyonda bilinen sayıda döngü yapmak istediğinizde, aşağıdaki gibi bir for döngü kullanabilirsiniz:

    for(int i =0; i < numFiles; i++) {
        var uploadedFile = Request.Files[i];
        if (uploadedFile.ContentLength > 0) {
            fileName = Path.GetFileName(uploadedFile.FileName);
    
        // etc.
    }
    

    Değişken i , sıfırdan ayarladığınız üst sınıra giden geçici bir sayaçtır. Bu durumda, üst sınır dosya sayısıdır. Ancak sayaç, ASP.NET'daki sayma senaryolarında olduğu gibi sıfırdan başladığından, üst sınır aslında dosya sayısının bir altındadır. (Üç dosya karşıya yüklenirse, sayı sıfırdan 2'ye kadardır.)

    uploadedCount değişkeni, başarıyla karşıya yüklenen ve kaydedilen tüm dosyaların toplamını alır. Bu kod, beklenen bir dosyanın karşıya yüklenememe olasılığını ifade edebilir.

  4. Sayfayı tarayıcıda çalıştırın. Tarayıcı, sayfayı ve iki karşıya yükleme kutusunu görüntüler.

  5. Karşıya yüklenecek iki dosyayı seçin.

  6. Başka bir dosya ekle'ye tıklayın. Sayfada yeni bir karşıya yükleme kutusu görüntülenir.

    Seçili dosyalara ve Karşıya Yükle düğmesine sahip iki dosya seçiciyi gösteren Dosya Yükleme Birden Çok Dosya Örneği web tarayıcısı sayfasının ekran görüntüsü.

  7. Karşıya Yükle'ye tıklayın.

  8. Web sitesinde proje klasörüne sağ tıklayın ve ardından Yenile'ye tıklayın.

  9. Başarıyla karşıya yüklenen dosyaları görmek için UploadedFiles klasörünü açın.

Ek Kaynaklar

ASP.NET Web Sayfaları Sitesinde Resimlerle Çalışma

CSV Dosyasına Aktarma