Karşıya Dosya Yükleme (VB)Uploading Files (VB)

Scott Mitchell tarafındanby Scott Mitchell

Örnek uygulamayı indirin veya PDF 'yi indirinDownload Sample App or Download PDF

Kullanıcıların, dosyanın dosya sisteminde veya veritabanında saklanabileceği Web sitenize ikili dosyaları (Word veya PDF belgeleri gibi) karşıya yüklemesine nasıl izin vereceğinizi öğrenin.Learn how to allow users to upload binary files (such as Word or PDF documents) to your Web site where they may be stored in either the server's file system or the database.

GirişIntroduction

Şimdiye kadar incelediğimiz tüm öğreticiler metin verileriyle özel olarak çalıştık.All of the tutorials we ve examined so far have worked exclusively with text data. Ancak, birçok uygulamanın hem metin hem de ikili verileri yakalayan veri modelleri vardır.However, many applications have data models that capture both text and binary data. Çevrimiçi bir site, kullanıcıların profiliyle ilişkilendirmek üzere bir resmi karşıya yüklemesine izin verebilir.An online dating site might allow users to upload a picture to associate with their profile. Bir işe alma Web sitesi, kullanıcıların özgeçmişini bir Microsoft Word veya PDF belgesi olarak karşıya yüklemesine izin verebilir.A recruiting website might let users upload their resume as a Microsoft Word or PDF document.

İkili verilerle çalışma yeni bir zorluk kümesi ekler.Working with binary data adds a new set of challenges. İkili verilerin uygulamada nasıl depolanacağına karar vermelidir.We must decide how the binary data is stored in the application. Yeni kayıtları eklemek için kullanılan arabirimin, kullanıcının bilgisayarından bir dosyayı karşıya yüklemesine izin vermek için güncelleştirilmeleri ve kayıt ile ilişkili ikili verileri indirmek için bir yol sağlamak üzere ek adımların alınması gerekir.The interface used for inserting new records has to be updated to allow the user to upload a file from their computer and extra steps must be taken to display or provide a means for downloading a record s associated binary data. Bu öğreticide ve sonraki üç zorluk bu zorlukları nasıl ele alacağız.In this tutorial and the next three we'll explore how to hurdle these challenges. Bu öğreticilerin sonunda, her kategoriden bir resim ve PDF Broşürü ilişkilendiğinde tam işlevli bir uygulama oluşturacaksınız.At the end of these tutorials we'll have built a fully functional application that associates a picture and PDF brochure with each category. Bu öğreticide, ikili verileri depolamak için farklı teknikler ele alacağız ve kullanıcıların bilgisayarından bir dosyayı karşıya yüklemesi ve Web sunucusu s dosya sistemine kaydedilmesini sağlama yöntemleri anlatılmaktadır.In this particular tutorial we'll look at different techniques for storing binary data and explore how to enable users to upload a file from their computer and have it saved on the web server s file system.

Note

Bir uygulama veri modelinin parçası olan ikili veriler bazen bir BLOBolarak adlandırılır, Ikili büyük nesne için bir kısaltma.Binary data that is part of an application s data model is sometimes referred to as a BLOB, an acronym for Binary Large OBject. Bu öğreticilerde, BLOB terimi eş anlamlı olsa da, terminoloji ikili verilerini kullanmayı seçtim.In these tutorials I have chosen to use the terminology binary data, although the term BLOB is synonymous.

1. Adım: Ikili veri Web sayfalarıyla çalışmayı oluşturmaStep 1: Creating the Working with Binary Data Web Pages

İkili veriler için destek eklemeyle ilgili güçlükleri keşfetmeye başlamadan önce, Web sitesi projemizdeki Bu öğretici ve sonraki üç için gereken ASP.NET sayfalarını oluşturmak için önce bir süre sürme.Before we begin to explore the challenges associated with adding support for binary data, let s first take a moment to create the ASP.NET pages in our website project that we'll need for this tutorial and the next three. BinaryDataadlı yeni bir klasör ekleyerek başlayın.Start by adding a new folder named BinaryData. Ardından, aşağıdaki ASP.NET sayfalarını bu klasöre ekleyerek her bir sayfayı Site.master ana sayfasıyla ilişkilendirdiğinizden emin olun:Next, add the following ASP.NET pages to that folder, making sure to associate each page with the Site.master master page:

  • Default.aspx
  • FileUpload.aspx
  • DisplayOrDownloadData.aspx
  • UploadInDetailsView.aspx
  • UpdatingAndDeleting.aspx

Ikili veri ile Ilgili öğreticiler için ASP.NET sayfaları ekleyin

Şekil 1: ikili veri Ile ilgili öğreticiler Için ASP.NET sayfaları eklemeFigure 1: Add the ASP.NET Pages for the Binary Data-Related Tutorials

Diğer klasörlerde olduğu gibi, BinaryData klasöründeki Default.aspx öğreticileri bölümündeki öğreticilerin listelecektir.Like in the other folders, Default.aspx in the BinaryData folder will list the tutorials in its section. SectionLevelTutorialListing.ascx Kullanıcı denetiminin bu işlevselliği sağladığını hatırlayın.Recall that the SectionLevelTutorialListing.ascx User Control provides this functionality. Bu nedenle, bu kullanıcı denetimini Çözüm Gezgini sayfa s Tasarım görünümü üzerine sürükleyerek Default.aspx ekleyin.Therefore, add this User Control to Default.aspx by dragging it from the Solution Explorer onto the page s Design view.

SectionLevelTutorialListing. ascx Kullanıcı denetimini default. aspx öğesine eklemek Add the SectionLevelTutorialListing.ascx User Control to Default.aspx

Şekil 2: SectionLevelTutorialListing.ascx kullanıcı denetimini Default.aspx ekleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 2: Add the SectionLevelTutorialListing.ascx User Control to Default.aspx (Click to view full-size image)

Son olarak, bu sayfaları Web.sitemap dosyasına girdi olarak ekleyin.Lastly, add these pages as entries to the Web.sitemap file. Özellikle, GridView 'u geliştirmeyle sonra aşağıdaki biçimlendirmeyi ekleyin <siteMapNode>:Specifically, add the following markup after the Enhancing the GridView <siteMapNode>:

<siteMapNode 
    title="Working with Binary Data" 
    url="~/BinaryData/Default.aspx" 
    description="Extend the data model to include collecting binary data.">
    
    <siteMapNode 
        title="Uploading Files" 
        url="~/BinaryData/FileUpload.aspx" 
        description="Examine the different ways to store binary data on the 
                     web server and see how to accept uploaded files from users 
                     with the FileUpload control." />
    <siteMapNode 
        title="Display or Download Binary Data" 
        url="~/BinaryData/DisplayOrDownloadData.aspx" 
        description="Let users view or download the captured binary data." />
    <siteMapNode 
        title="Adding New Binary Data" 
        url="~/BinaryData/UploadInDetailsView.aspx" 
        description="Learn how to augment the inserting interface to 
                     include a FileUpload control." />
    <siteMapNode 
        title="Updating and Deleting Existing Binary Data" 
        url="~/BinaryData/UpdatingAndDeleting.aspx" 
        description="Learn how to update and delete existing binary data." />
</siteMapNode>

Web.sitemapgüncelleştirildikten sonra Öğreticiler Web sitesini bir tarayıcıdan görüntülemek için bir dakikanızı ayırın.After updating Web.sitemap, take a moment to view the tutorials website through a browser. Sol taraftaki menüde artık Ikili veri öğreticileri ile çalışma için öğeler yer almaktadır.The menu on the left now includes items for the Working with Binary Data tutorials.

Site Haritası artık Ikili veri öğreticileri ile çalışmaya yönelik girişleri Içerir

Şekil 3: site haritası artık Ikili veri öğreticileri ile çalışmaya yönelik girişleri içerirFigure 3: The Site Map Now Includes Entries for the Working with Binary Data Tutorials

2. Adım: Ikili verileri nerede depolayacağınıza karar vermeStep 2: Deciding Where to Store the Binary Data

Uygulama veri modeliyle ilişkili ikili veriler iki konumdan birinde depolanabilir: Web sunucusu s dosya sisteminde, veritabanında depolanan dosyaya yönelik bir başvuruya sahip olan. ya da doğrudan veritabanı içinden (bkz. Şekil 4).Binary data that is associated with the application s data model can be stored in one of two places: on the web server s file system with a reference to the file stored in the database; or directly within the database itself (see Figure 4). Her yaklaşımın kendi profesyonelleri ve olumsuz yönleri vardır ve daha ayrıntılı bir tartışmayı birleşmiştir.Each approach has its own set of pros and cons and merits a more detailed discussion.

Ikili veriler dosya sisteminde veya doğrudan veritabanında depolanabilirBinary Data Can Be Stored On the File System or Directly in the Database

Şekil 4: Ikili veriler dosya sisteminde veya doğrudan veritabanında depolanabilir (tam boyutlu görüntüyü görüntülemek için tıklatın)Figure 4: Binary Data Can Be Stored On the File System or Directly in the Database (Click to view full-size image)

Northwind veritabanını her ürünle bir resmi ilişkilendirmek üzere uzatmak istediğinizi düşünün.Imagine that we wanted to extend the Northwind database to associate a picture with each product. Tek bir seçenek, bu görüntü dosyalarını Web sunucusu s dosya sisteminde depolamak ve yolu Products tablosuna kaydeder.One option would be to store these image files on the web server s file system and record the path in the Products table. Bu yaklaşımda, belki varchar(200)türünde Products tabloya bir ImagePath sütunu ekleyeceğiz.With this approach, we d add an ImagePath column to the Products table of type varchar(200), perhaps. Kullanıcı Chai için bir resim yüklediğini, bu resim ~/Images/Tea.jpgadresindeki Web sunucusu s dosya sisteminde depolanabilir; burada ~, uygulamanın fiziksel yolunu temsil eder.When a user uploaded a picture for Chai, that picture might be stored on the web server s file system at ~/Images/Tea.jpg, where ~ represents the application s physical path. Diğer bir deyişle, Web sitesinin kökü fiziksel yolda C:\Websites\Northwind\, ~/Images/Tea.jpg C:\Websites\Northwind\Images\Tea.jpgeşdeğerdir.That is, if the web site is rooted at the physical path C:\Websites\Northwind\, ~/Images/Tea.jpg would be equivalent to C:\Websites\Northwind\Images\Tea.jpg. Resim dosyasını karşıya yükledikten sonra, Products tablosundaki Chai kaydını, ImagePath sütununun yeni görüntünün yolunu başvurduğu şekilde güncelleştirdik.After uploading the image file, we d update the Chai record in the Products table so that its ImagePath column referenced the path of the new image. Tüm ürün görüntülerinin uygulama s Images klasörüne yerleştirilmesi gerektiğine karar verdiğimiz durumlarda ~/Images/Tea.jpg veya yalnızca Tea.jpg kullanabilirsiniz.We could use ~/Images/Tea.jpg or just Tea.jpg if we decided that all product images would be placed in the application s Images folder.

İkili verileri dosya sisteminde depolamanın başlıca avantajları şunlardır:The main advantages of storing the binary data on the file system are:

  • Kısa süre içinde, doğrudan veritabanı içinde depolanan ikili verilerin depolanması ve alınması, dosya sistemi aracılığıyla verilerle çalışırken biraz daha fazla kod içerir.Ease of implementation as we'll see shortly, storing and retrieving binary data stored directly within the database involves a bit more code than when working with data through the file system. Ayrıca, bir kullanıcının ikili verileri görüntülemesi veya indirmesi için bu verilere yönelik bir URL ile sunulmaları gerekir.Additionally, in order for a user to view or download binary data they must be presented with a URL to that data. Veriler Web sunucusu s dosya sisteminde bulunuyorsa, URL basittir.If the data resides on the web server s file system, the URL is straightforward. Ancak veriler veritabanında depolanıyorsa, verileri alacak ve veritabanından döndürecek bir Web sayfasının oluşturulması gerekir.If the data is stored in the database, however, a web page needs to be created that will retrieve and return the data from the database.
  • İkili verilere daha fazla erişme ikili verilere, verileri veritabanından çekmeyecek diğer hizmetler veya uygulamalar için erişilebilir olması gerekebilir.Wider access to the binary data the binary data may need to be accessible to other services or applications, ones that cannot pull the data from the database. Örneğin, her ürünle ilişkili görüntülerin de FTParacılığıyla kullanıcılara açık olması gerekebilir, bu durumda ikili verileri dosya sisteminde depolamak istiyoruz.For example, the images associated with each product might also need to be available to users through FTP, in which case we d want to store the binary data on the file system.
  • Performans ikili veriler dosya sisteminde depolanıyorsa, veritabanı sunucusu ve Web sunucusu arasındaki talep ve ağ tıkanıklığı, ikili veriler doğrudan veritabanı içinde depolanacaksa küçüktür.Performance if the binary data is stored on the file system, the demand and network congestion between the database server and web server will be less than if the binary data is stored directly within the database.

İkili verileri dosya sisteminde depolamanın temel dezavantajı, verileri veritabanından ayırmasıdır.The main disadvantage of storing binary data on the file system is that it decouples the data from the database. Products tablosundan bir kayıt silinirse, Web sunucusu s dosya sistemindeki ilişkili dosya otomatik olarak silinmez.If a record is deleted from the Products table, the associated file on the web server s file system is not automatically deleted. Dosyayı silmek için ek kod yazdık veya dosya sistemi kullanılmayan, yalnız bırakılmış dosyalarla karışık olacak.We must write extra code to delete the file or the file system will become cluttered with unused, orphaned files. Ayrıca, veritabanını yedeklerken, ilişkili ikili verilerin yedeklerini de dosya sisteminde gerçekleştirdiğinizden emin olmanız gerekir.Furthermore, when backing up the database, we must make sure to make backups of the associated binary data on the file system, as well. Veritabanını başka bir siteye veya sunucuya taşımak benzer sorunlar doğurur.Moving the database to another site or server poses similar challenges.

Alternatif olarak, ikili veriler varbinarytüründe bir sütun oluşturarak doğrudan bir Microsoft SQL Server 2005 veritabanında depolanabilir.Alternatively, binary data can be stored directly in a Microsoft SQL Server 2005 database by creating a column of type varbinary. Diğer değişken uzunluklu veri türleriyle benzer şekilde, bu sütunda tutulabilecek ikili verilerin maksimum uzunluğunu belirtebilirsiniz.Like with other variable length data types, you can specify a maximum length of the binary data that can be held in this column. Örneğin, en fazla 5.000 bayt ayırmak için varbinary(5000); varbinary(MAX), en fazla 2 GB depolama boyutuna izin verir.For example, to reserve at most 5,000 bytes use varbinary(5000); varbinary(MAX) allows for the maximum storage size, about 2 GB.

İkili verileri doğrudan veritabanında depolamanın ana avantajı, ikili veriler ve veritabanı kaydı arasında sıkı bir şekilde yapılır.The main advantage of storing binary data directly in the database is the tight coupling between the binary data and the database record. Bu, yedeklemeler veya veritabanını farklı bir siteye veya sunucuya taşıma gibi veritabanı yönetim görevlerini büyük ölçüde basitleştirir.This greatly simplifies database administration tasks, like backups or moving the database to a different site or server. Ayrıca, bir kaydın silinmesi karşılık gelen ikili verileri otomatik olarak siler.Also, deleting a record automatically deletes the corresponding binary data. Ayrıca, ikili verileri veritabanında depolamanın daha hafif avantajları da vardır.There are also more subtle benefits of storing the binary data in the database. Daha ayrıntılı bir tartışma için bkz. ASP.NET 2,0 kullanarak Ikili dosyaları doğrudan veritabanında depolama .See Storing Binary Files Directly in the Database Using ASP.NET 2.0 for a more in-depth discussion.

Note

Microsoft SQL Server 2000 ve önceki sürümlerde, varbinary veri türü en fazla 8.000 bayt sınırına sahipti.In Microsoft SQL Server 2000 and earlier versions, the varbinary data type had a maximum limit of 8,000 bytes. 2 GB 'a kadar ikili veri depolamak için, bunun yerine image veri türünün kullanılması gerekir.To store up to 2 GB of binary data the image data type needs to be used instead. Ancak MAX SQL Server 2005 ' deki eklenmesiyle image veri türü kullanım dışı bırakılmıştır.With the addition of MAX in SQL Server 2005, however, the image data type has been deprecated. Geriye dönük uyumluluk için hala desteklenmektedir, ancak Microsoft, image veri türünün gelecekte SQL Server bir sürümünde kaldırılacağını duyurmuştur.It s still supported for backwards compatibility, but Microsoft has announced that the image data type will be removed in a future version of SQL Server.

Daha eski bir veri modeliyle çalışıyorsanız image veri türünü görebilirsiniz.If you are working with an older data model you may see the image data type. Northwind veritabanı Categories tablosu, kategori için bir görüntü dosyasının ikili verilerini depolamak için kullanılabilecek bir Picture sütununa sahiptir.The Northwind database s Categories table has a Picture column that can be used to store the binary data of an image file for the category. Northwind veritabanının Microsoft Access ve daha önceki SQL Server sürümlerindeki köklerine sahip olduğundan, bu sütun imagetüründedir.Since the Northwind database has its roots in Microsoft Access and earlier versions of SQL Server, this column is of type image.

Bu öğretici ve sonraki üç yaklaşım için her iki yaklaşımı de kullanacağız.For this tutorial and the next three, we'll use both approaches. Categories tabloda, kategori için bir görüntünün ikili içeriğini depolamak üzere bir Picture sütunu zaten var.The Categories table already has a Picture column for storing the binary content of an image for the category. Kategoriye bir yazdırma kalitesi, şık bir genel bakış sağlamak için kullanılabilen Web sunucusu s dosya sisteminde bir PDF 'nin yolunu depolamak üzere BrochurePathek bir sütun ekleyeceğiz.We'll add an additional column, BrochurePath, to store a path to a PDF on the web server s file system that can be used to provide a print-quality, polished overview of the category.

Adım 3:CategoriestabloyaBrochurePathsütununu eklemeStep 3: Adding theBrochurePathColumn to theCategoriesTable

Şu anda Kategoriler tablosu yalnızca dört sütuna sahiptir: CategoryID, CategoryName, Descriptionve Picture.Currently the Categories table has only four columns: CategoryID, CategoryName, Description, and Picture. Bu alanlara ek olarak, (varsa) kategori broşürleri işaret edecek yeni bir tane eklememiz gerekiyor.In addition to these fields, we need to add a new one that will point to the category s brochure (if one exists). Bu sütunu eklemek için Sunucu Gezgini gidin, tablolarda ayrıntıya gidin, Categories tablosuna sağ tıklayın ve tablo tanımını aç ' ı seçin (bkz. Şekil 5).To add this column, go to the Server Explorer, drill down into the Tables, right-click on the Categories table and choose Open Table Definition (see Figure 5). Sunucu Gezgini görmüyorsanız, Görünüm menüsünden Sunucu Gezgini seçeneğini seçerek veya CTRL + ALT + S tuşlarına basın.If you do not see the Server Explorer, bring it up by selecting the Server Explorer option from the View menu, or hit Ctrl+Alt+S.

BrochurePath adlı Categories tabloya yeni bir varchar(200) sütunu ekleyin ve NULL s 'ye izin verir ve kaydet simgesine tıklayın (veya CTRL + S tuşlarına basın).Add a new varchar(200) column to the Categories table that is named BrochurePath and allows NULL s and click the Save icon (or hit Ctrl+S).

Kategoriler tablosuna bir BrochurePath sütunu eklemek Add a BrochurePath Column to the Categories Table

Şekil 5: Categories tablosuna bir BrochurePath sütunu ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 5: Add a BrochurePath Column to the Categories Table (Click to view full-size image)

4. Adım: mimariyiPictureveBrochurePathsütunları kullanacak şekilde güncelleştirmeStep 4: Updating the Architecture to Use thePictureandBrochurePathColumns

Veri erişim katmanındaki (DAL) CategoriesDataTable Şu anda dört DataColumn s tanımlı: CategoryID, CategoryName, Descriptionve NumberOfProducts.The CategoriesDataTable in the Data Access Layer (DAL) currently has four DataColumn s defined: CategoryID, CategoryName, Description, and NumberOfProducts. Veri erişim katmanı oluşturma öğreticisinde başlangıçta bu DataTable 'ı tasarladığımızda, CategoriesDataTable yalnızca ilk üç sütun içeriyordu; NumberOfProducts sütunu, Ayrıntılar DataList öğreticisi Ile madde Işaretli ana kayıt listesi kullanılarak ana/ayrıntıya eklenmiştir.When we originally designed this DataTable in the Creating a Data Access Layer tutorial, the CategoriesDataTable only had the first three columns; the NumberOfProducts column was added in the Master/Detail Using a Bulleted List of Master Records with a Details DataList tutorial.

Veri erişim katmanı oluşturmabölümünde açıklandığı gibi, yazılan veri kümesindeki DataTable iş nesnelerini oluşturur.As discussed in Creating a Data Access Layer, the DataTables in the Typed DataSet make up the business objects. TableAdapters, veritabanıyla iletişim kurmaktan ve iş nesnelerinin sorgu sonuçlarıyla doldurulmasından sorumludur.The TableAdapters are responsible for communicating with the database and populating the business objects with the query results. CategoriesDataTable, üç veri alma yöntemine sahip olan CategoriesTableAdapterdoldurulur:The CategoriesDataTable is populated by the CategoriesTableAdapter, which has three data retrieval methods:

  • GetCategories() TableAdapter s ana sorgusunu yürütür ve Categories tablosundaki tüm kayıtların CategoryID, CategoryNameve Description alanlarını döndürür.GetCategories() executes the TableAdapter s main query and returns the CategoryID, CategoryName, and Description fields of all records in the Categories table. Ana sorgu, otomatik olarak oluşturulan Insert ve Update yöntemleri tarafından kullanılır.The main query is what is used by the auto-generated Insert and Update methods.
  • GetCategoryByCategoryID(categoryID), CategoryID eşit CategoryIDdeğerine sahip kategorinin CategoryID, CategoryNameve Description alanlarını döndürür.GetCategoryByCategoryID(categoryID) returns the CategoryID, CategoryName, and Description fields of the category whose CategoryID equals categoryID.
  • GetCategoriesAndNumberOfProducts()-Categories tablosundaki tüm kayıtlar için CategoryID, CategoryNameve Description alanlarını döndürür.GetCategoriesAndNumberOfProducts() - returns the CategoryID, CategoryName, and Description fields for all records in the Categories table. Ayrıca, her bir kategoriyle ilişkili ürün sayısını döndürmek için bir alt sorgu kullanır.Also uses a subquery to return the number of products associated with each category.

Bu sorguların hiçbirinin Categories tablo s Picture veya BrochurePath sütunları döndürmediğine dikkat edin; CategoriesDataTable bu alanlar için DataColumn s de sağlar.Notice that none of these queries return the Categories table s Picture or BrochurePath columns; nor does the CategoriesDataTable provide DataColumn s for these fields. Resim ve BrochurePath özellikleriyle çalışmak için, önce bunları CategoriesDataTable eklemeli ve ardından CategoriesTableAdapter sınıfını bu sütunları döndürecek şekilde güncelleştirmemiz gerekir.In order to work with the Picture and BrochurePath properties, we need to first add them to the CategoriesDataTable and then update the CategoriesTableAdapter class to return these columns.

PictureveBrochurePath``DataColumn s eklemeAdding thePictureandBrochurePath``DataColumn s

Bu iki sütunu CategoriesDataTableekleyerek başlayın.Start by adding these two columns to the CategoriesDataTable. CategoriesDataTable s üstbilgisine sağ tıklayın, bağlam menüsünden Ekle ' yi seçin ve ardından sütun seçeneğini belirleyin.Right-click on the CategoriesDataTable s header, select Add from the context menu and then choose the Column option. Bu, DataTable dosyasında Column1adlı yeni bir DataColumn oluşturur.This will create a new DataColumn in the DataTable named Column1. Bu sütunu Pictureolarak yeniden adlandırın.Rename this column to Picture. Özellikler penceresi, DataColumn s DataType özelliğini System.Byte[] olarak ayarlayın (Bu, açılan listede bir seçenek değildir; içine yazmanız gerekir).From the Properties window, set the DataColumn s DataType property to System.Byte[] (this is not an option in the drop-down list; you need to type it in).

veri türü System. Byte [] olan bir DataColumn adlı resim oluşturmaCreate a DataColumn Named Picture whose DataType is System.Byte[]

Şekil 6: DataType System.Byte[] olan Picture adlı DataColumn oluşturma (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 6: Create a DataColumn Named Picture whose DataType is System.Byte[] (Click to view full-size image)

DataTable 'a başka bir DataColumn ekleyin, BrochurePath varsayılan DataType değeri (System.String) kullanarak adlandırarak.Add another DataColumn to the DataTable, naming it BrochurePath using the default DataType value (System.String).

TableAdapter 'tanPictureveBrochurePathdeğerlerini döndürmeReturning thePictureandBrochurePathValues from the TableAdapter

Bu iki DataColumn CategoriesDataTableeklenmiş olan CategoriesTableAdaptergüncelleştirilmeye yeniden hazırlandık.With these two DataColumn s added to the CategoriesDataTable, we re ready to update the CategoriesTableAdapter. Bu sütun değerlerinin her ikisi de ana TableAdapter sorgusunda döndürüyoruz, ancak GetCategories() yöntemi her çağrıldığında ikili verileri geri getirecek.We could have both of these column values returned in the main TableAdapter query, but this would bring back the binary data every time the GetCategories() method was invoked. Bunun yerine, bir ana TableAdapter sorgusunu BrochurePath geri getirip, belirli bir kategorinin Picture sütununu döndüren ek bir veri alma yöntemi oluşturacak şekilde güncelleştirmesine izin verin.Instead, let s update the main TableAdapter query to bring back BrochurePath and create an additional data retrieval method that returns a particular category s Picture column.

Ana TableAdapter sorgusunu güncelleştirmek için CategoriesTableAdapter s üstbilgisine sağ tıklayın ve bağlam menüsünden Yapılandır seçeneğini belirleyin.To update the main TableAdapter query, right-click on the CategoriesTableAdapter s header and choose the Configure option from the context menu. Bu, bir dizi geçmiş öğreticilerde görtiğimiz tablo bağdaştırıcısı yapılandırma sihirbazını getirir.This brings up the Table Adapter Configuration Wizard, which we ve seen in a number of past tutorials. BrochurePath geri getirip son ' a tıklayarak sorguyu güncelleştirin.Update the query to bring back the BrochurePath and click Finish.

SELECT deyimindeki sütun listesini güncelleştirmek için de BrochurePath döndürünUpdate the Column List in the SELECT Statement to Also Return BrochurePath

Şekil 7: SELECT deyimindeki sütun listesini, ayrıca BrochurePath döndürmek için güncelleştirin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 7: Update the Column List in the SELECT Statement to Also Return BrochurePath (Click to view full-size image)

TableAdapter için geçici SQL deyimleri kullanılırken, ana sorgudaki sütun listesini güncelleştirmek TableAdapter içindeki tüm SELECT sorgu yöntemlerinin sütun listesini günceller.When using ad-hoc SQL statements for the TableAdapter, updating the column list in the main query updates the column list for all of the SELECT query methods in the TableAdapter. Bu, GetCategoryByCategoryID(categoryID) yönteminin BrochurePath sütununu döndürecek şekilde güncelleştirildiği anlamına gelir. Bu, amaçlarız olabilir.That means the GetCategoryByCategoryID(categoryID) method has been updated to return the BrochurePath column, which might be what we intended. Ancak, her bir kategorinin ürün sayısını döndüren alt sorguyu kaldırarak GetCategoriesAndNumberOfProducts() yöntemindeki sütun listesini de güncelleştirirler!However, it also updated the column list in the GetCategoriesAndNumberOfProducts() method, removing the subquery that returns the number of products for each category! Bu nedenle, bu yöntem SELECT sorgusunu güncelleştirmemiz gerekiyor.Therefore, we need to update this method s SELECT query. GetCategoriesAndNumberOfProducts() yöntemine sağ tıklayın, Yapılandır ' ı seçin ve SELECT sorgusunu özgün değerine geri geri alın:Right-click on the GetCategoriesAndNumberOfProducts() method, choose Configure, and revert the SELECT query back to its original value:

SELECT CategoryID, CategoryName, Description, 
       (SELECT COUNT(*) 
            FROM Products p 
            WHERE p.CategoryID = c.CategoryID) 
       as NumberOfProducts
FROM Categories c

Sonra, belirli bir kategori Picture sütun değeri döndüren yeni bir TableAdapter yöntemi oluşturun.Next, create a new TableAdapter method that returns a particular category s Picture column value. CategoriesTableAdapter s üstbilgisine sağ tıklayın ve TableAdapter sorgu Yapılandırma Sihirbazı 'nı başlatmak için Sorgu Ekle seçeneğini belirleyin.Right-click on the CategoriesTableAdapter s header and choose the Add Query option to launch the TableAdapter Query Configuration Wizard. Bu sihirbazın ilk adımı, verileri geçici bir SQL ifadesini, yeni bir saklı yordamı veya var olan bir SQL ifadesini kullanarak sorgulamak isteyip istemediğinizi sorar.The first step of this wizard asks us if we want to query data using an ad-hoc SQL statement, a new stored procedure, or an existing one. SQL deyimlerini kullan ' ı seçin ve Ileri ' ye tıklayın.Select Use SQL statements and click Next. Bir satır döndüyoruz, ikinci adımda satırları döndüren Seç seçeneğini belirleyin.Since we will be returning a row, choose the SELECT which returns rows option from the second step.

SQL deyimlerini kullan seçeneğini belirleyinSelect the Use SQL statements Option

Şekil 8: SQL deyimlerini kullan seçeneğini belirleyin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 8: Select the Use SQL statements Option (Click to view full-size image)

Sorgu Kategoriler tablosundan bir kayıt döndürdüğünden , satırları döndüren Seç ' i seçinSince the Query Will Return a Record from the Categories Table, Choose SELECT which returns rows

Şekil 9: sorgu Kategoriler tablosundan bir kayıt döndürecek olduğundan, satırları döndüren Seç' i seçin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 9: Since the Query Will Return a Record from the Categories Table, Choose SELECT which returns rows (Click to view full-size image)

Üçüncü adımda, aşağıdaki SQL sorgusunu girin ve Ileri ' ye tıklayın:In the third step, enter the following SQL query and click Next:

SELECT     CategoryID, CategoryName, Description, BrochurePath, Picture
FROM       Categories
WHERE      CategoryID = @CategoryID

Son adım, yeni yöntemin adını seçdir.The last step is to choose the name for the new method. DataTable Fill ve sırasıyla bir DataTable desenleri döndüren FillCategoryWithBinaryDataByCategoryID ve GetCategoryWithBinaryDataByCategoryID kullanın.Use FillCategoryWithBinaryDataByCategoryID and GetCategoryWithBinaryDataByCategoryID for the Fill a DataTable and Return a DataTable patterns, respectively. Sihirbazı tamamladığınızda son ' a tıklayın.Click Finish to complete the wizard.

TableAdapter s yöntemlerinin adlarını seçin Choose the Names for the TableAdapter s Methods

Şekil 10: TableAdapter s metotları için adları seçin (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 10: Choose the Names for the TableAdapter s Methods (Click to view full-size image)

Note

Tablo bağdaştırıcısı sorgu Yapılandırma Sihirbazı 'Nı tamamladıktan sonra, yeni komut metninin, ana sorgunun şemasından farklı bir şemaya sahip verileri döndürdüğünü bildiren bir iletişim kutusu görebilirsiniz.After completing the Table Adapter Query Configuration Wizard you may see a dialog box informing you that the new command text returns data with schema different from the schema of the main query. Kısaca, sihirbaz TableAdapter ana sorgusunun GetCategories() yeni oluşturduğumuz olandan farklı bir şema döndürdüğünden emin olur.In short, the wizard is noting that the TableAdapter s main query GetCategories() returns a different schema than the one we just created. Ancak bu durum, bu iletiyi yoksayabilirsiniz.But this is what we want, so you can disregard this message.

Ayrıca, geçici SQL deyimlerini kullanıyorsanız ve daha sonra TableAdapter s ana sorgusunu değiştirmek için Sihirbazı kullanırsanız, GetCategoryWithBinaryDataByCategoryID yöntemi SELECT deyim listesini ana sorgudan yalnızca bu sütunları içerecek şekilde değiştirecek (yani Picture sütununu sorgudan kaldıracak) göz önünde bulundurmanız gerekir.)Also, keep in mind that if you are using ad-hoc SQL statements and use the wizard to change the TableAdapter s main query at some later point in time, it will modify the GetCategoryWithBinaryDataByCategoryID method s SELECT statement s column list to include just those columns from the main query (that is, it will remove the Picture column from the query). Bu adımda daha önce GetCategoriesAndNumberOfProducts() yöntemi ile yaptığımız gibi Picture sütununu döndürecek şekilde sütun listesini el ile güncelleştirmeniz gerekir.You will have to manually update the column list to return the Picture column, similar to what we did with the GetCategoriesAndNumberOfProducts() method earlier in this step.

İki DataColumn CategoriesDataTable ve GetCategoryWithBinaryDataByCategoryID CategoriesTableAdapteryöntemine eklendikten sonra, yazılan veri kümesi tasarımcısında bu sınıfların Şekil 11 ' de ekran görüntüsü gibi görünmesi gerekir.After adding the two DataColumn s to the CategoriesDataTable and the GetCategoryWithBinaryDataByCategoryID method to the CategoriesTableAdapter, these classes in the Typed DataSet Designer should look like the screenshot in Figure 11.

Veri kümesi Tasarımcısı yeni sütunları ve yöntemi Içerir

Şekil 11: veri kümesi Tasarımcısı yeni sütunları ve yöntemi içerirFigure 11: The DataSet Designer Includes the New Columns and Method

Iş mantığı katmanını (BLL) güncelleştirmeUpdating the Business Logic Layer (BLL)

DAL güncelleştirildiğinden, her şey, yeni CategoriesTableAdapter yöntemi için bir yöntem eklemek üzere Iş mantığı katmanını (BLL) artırmak için kullanılır.With the DAL updated, all that remains is to augment the Business Logic Layer (BLL) to include a method for the new CategoriesTableAdapter method. CategoriesBLL sınıfına aşağıdaki yöntemi ekleyin:Add the following method to the CategoriesBLL class:

<System.ComponentModel.DataObjectMethodAttribute _
    (System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetCategoryWithBinaryDataByCategoryID(categoryID As Integer) _
    As Northwind.CategoriesDataTable
    
    Return Adapter.GetCategoryWithBinaryDataByCategoryID(categoryID)
End Function

5. Adım: Istemciden Web sunucusuna dosya yüklemeStep 5: Uploading a File From the Client to the Web Server

İkili veriler toplanırken, bu veriler Son Kullanıcı tarafından sağlanır.When collecting binary data, oftentimes this data is supplied by an end user. Bu bilgileri yakalamak için, kullanıcının bilgisayarından Web sunucusuna bir dosya yükleyebilmeleri gerekir.To capture this information, the user needs to be able to upload a file from their computer to the web server. Karşıya yüklenen verilerin veri modeliyle tümleşik olması gerekir. Bu, dosyayı Web sunucusu s dosya sistemine kaydetmek ve veritabanına dosya yolu eklemek ya da ikili içerikleri doğrudan veritabanına yazmak anlamına gelebilir.The uploaded data then needs to be integrated with the data model, which may mean saving the file to the web server s file system and adding a path to the file in the database, or writing the binary contents directly into the database. Bu adımda, bir kullanıcının bilgisayarından sunucusuna dosya yüklemesine nasıl izin vereceğiz bölümüne bakacağız.In this step we'll look at how to allow a user to upload files from their computer to the server. Sonraki öğreticide karşıya yüklenen dosyayı veri modeliyle tümleştirmek için ilgilenmeniz gerekir.In the next tutorial we'll turn our attention to integrating the uploaded file with data model.

ASP.NET 2,0 s New FileUpload Web Control , kullanıcıların bilgisayarından Web sunucusuna dosya gönderebilmesi için bir mekanizma sağlar.ASP.NET 2.0 s new FileUpload Web control provides a mechanism for users to send a file from their computer to the web server. FileUpload denetimi, type özniteliği dosya olarak ayarlanan bir <input> öğesi olarak işlenir ve bu da tarayıcıların, bir e-posta kutusu olarak bir düğme olarak görüntülenmesini sağlar.The FileUpload control renders as an <input> element whose type attribute is set to file, which browsers display as a textbox with a Browse button. Tarayıcı düğmesine tıklamak, kullanıcının bir dosya seçmesini sağlayan bir iletişim kutusu açar.Clicking the Browse button brings up a dialog box from which the user can select a file. Form geri gönderildiğinde, seçili dosya içerikleri geri gönderme ile birlikte gönderilir.When the form is posted back, the selected file s contents are sent along with the postback. Sunucu tarafında, karşıya yüklenen dosyayla ilgili bilgilere dosya yükleme denetim s özellikleri aracılığıyla erişilebilir.On the server-side, information about the uploaded file is accessible through the FileUpload control s properties.

Dosyaları karşıya yükleme işlemini göstermek için, BinaryData klasöründeki FileUpload.aspx sayfasını açın, araç kutusundan bir dosya yükleme denetimini tasarımcı üzerine sürükleyin ve denetim s ID özelliğini UploadTestolarak ayarlayın.To demonstrate uploading files, open the FileUpload.aspx page in the BinaryData folder, drag a FileUpload control from the Toolbox onto the Designer, and set the control s ID property to UploadTest. Daha sonra, ID ve Text özelliklerini UploadButton ve sırasıyla seçili dosyayı karşıya yüklemek için bir Button Web Control ekleyin.Next, add a Button Web control setting its ID and Text properties to UploadButton and Upload Selected File, respectively. Son olarak, düğmenin altına bir etiket Web denetimi yerleştirin, Text özelliğini temizleyin ve ID özelliğini UploadDetailsolarak ayarlayın.Finally, place a Label Web control beneath the Button, clear out its Text property and set its ID property to UploadDetails.

ASP.NET sayfasına dosya yükleme denetimi ekleme Add a FileUpload Control to the ASP.NET Page

Şekil 12: ASP.NET sayfasına bir dosya yükleme denetimi ekleme (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 12: Add a FileUpload Control to the ASP.NET Page (Click to view full-size image)

Şekil 13, bir tarayıcı aracılığıyla görüntülenirken bu sayfayı gösterir.Figure 13 shows this page when viewed through a browser. Göz at düğmesine tıklanması bir dosya seçimi iletişim kutusu gösterir ve kullanıcının bilgisayarından bir dosya seçmesini sağlar.Note that clicking the Browse button brings up a file selection dialog box, allowing the user to pick a file from their computer. Bir dosya seçildikten sonra, seçili dosyayı karşıya yükle düğmesine tıklamak seçili dosyanın ikili içeriğini Web sunucusuna gönderen bir geri göndermeye neden olur.Once a file has been selected, clicking the Upload Selected File button causes a postback that sends the selected file s binary content to the web server.

Kullanıcı, bilgisayarından sunucusuna yüklemek için bir dosya seçebilirThe User Can Select a File to Upload from their Computer to the Server

Şekil 13: Kullanıcı, bilgisayarından sunucusuna yüklemek Için bir dosya seçebilir (tam boyutlu görüntüyü görüntülemek için tıklatın)Figure 13: The User Can Select a File to Upload from their Computer to the Server (Click to view full-size image)

Geri göndermede, karşıya yüklenen dosya dosya sistemine kaydedilebilir veya ikili verileri doğrudan bir akış üzerinden çalışabilir.On postback, the uploaded file can be saved to the file system or its binary data can be worked with directly through a Stream. Bu örnekte, s ~/Brochures bir klasör oluşturur ve karşıya yüklenen dosyayı buraya kaydeder.For this example, let s create a ~/Brochures folder and save the uploaded file there. Brochures klasörünü, kök dizinin bir alt klasörü olarak siteye ekleyerek başlayın.Start by adding the Brochures folder to the site as a subfolder of the root directory. Sonra, UploadButton s Click olayı için bir olay işleyicisi oluşturun ve aşağıdaki kodu ekleyin:Next, create an event handler for the UploadButton s Click event and add the following code:

Protected Sub UploadButton_Click(sender As Object, e As EventArgs) _
    Handles UploadButton.Click
    
    If UploadTest.HasFile = False Then
        ' No file uploaded!
        UploadDetails.Text = "Please first select a file to upload..."
    Else
        ' Display the uploaded file's details
        UploadDetails.Text = String.Format( _
                "Uploaded file: {0}<br />" & _
                "File size (in bytes): {1:N0}<br />" & _
                "Content-type: {2}", _
                UploadTest.FileName, _
                UploadTest.FileBytes.Length, _
                UploadTest.PostedFile.ContentType)
        ' Save the file
        Dim filePath As String = _
            Server.MapPath("~/Brochures/" & UploadTest.FileName)
        UploadTest.SaveAs(filePath)
    End If
End Sub

Dosya karşıya yükleme denetimi, karşıya yüklenen verilerle çalışmaya yönelik çeşitli özellikler sağlar.The FileUpload control provides a variety of properties for working with the uploaded data. Örneğin, HasFile özelliği , bir dosyanın Kullanıcı tarafından karşıya yüklenip yüklenmediğini belirtir, ancak FileBytes özelliği , karşıya yüklenen ikili verilere bir bayt dizisi olarak erişim sağlar.For instance, the HasFile property indicates whether a file was uploaded by the user, while the FileBytes property provides access to the uploaded binary data as an array of bytes. Click olay işleyicisi, bir dosyanın karşıya yüklendiğinden emin olarak başlar.The Click event handler starts by ensuring that a file has been uploaded. Bir dosya karşıya yüklenmişse, etiket karşıya yüklenen dosyanın adını, bayt cinsinden boyutunu ve içerik türünü gösterir.If a file has been uploaded, the Label shows the name of the uploaded file, its size in bytes, and its content-type.

Note

Kullanıcının bir dosyayı karşıya yüklemediğinden emin olmak için HasFile özelliğini denetleyebilir ve Falsebir uyarı görüntüleyebilir veya bunun yerine RequiredFieldValidator denetimini kullanabilirsiniz.To ensure that the user uploads a file you can check the HasFile property and display a warning if it s False, or you may use the RequiredFieldValidator control instead.

Dosya karşıya yükleme SaveAs(filePath), yüklenen dosyayı belirtilen FilePathöğesine kaydeder.The FileUpload s SaveAs(filePath) saves the uploaded file to the specified filePath. FilePath bir sanal yol (/Brochures/SomeFile.pdf) yerine bir fiziksel yol (C:\Websites\Brochures\SomeFile.pdf) olmalıdır.filePath must be a physical path (C:\Websites\Brochures\SomeFile.pdf) rather than a virtual path (/Brochures/SomeFile.pdf). Server.MapPath(virtPath) yöntemi bir sanal yol alır ve karşılık gelen fiziksel yolunu döndürür.The Server.MapPath(virtPath) method takes a virtual path and returns its corresponding physical path. Burada, sanal yol ~/Brochures/fileName, burada filename karşıya yüklenen dosyanın adıdır.Here, the virtual path is ~/Brochures/fileName, where fileName is the name of the uploaded file. Sanal ve fiziksel yollar hakkında daha fazla bilgi edinmek ve Server.MapPathkullanmak için bkz. Server. MapPath kullanma .See Using Server.MapPath for more information on virtual and physical paths and using Server.MapPath.

Click olay işleyicisini tamamladıktan sonra, sayfayı bir tarayıcıda test etmek biraz zaman ayırın.After completing the Click event handler, take a moment to test out the page in a browser. E-bul düğmesine tıklayın ve sabit sürücünüzden bir dosya seçip seçili dosyayı karşıya yükle düğmesine tıklayın.Click the Browse button and select a file from your hard drive and then click the Upload Selected File button. Geri gönderme, seçili dosyanın içeriğini Web sunucusuna gönderir ve daha sonra ~/Brochures klasöre kaydedilmeden önce dosya hakkındaki bilgileri görüntüler.The postback will send the contents of the selected file to the web server, which will then display information about the file before saving it to the ~/Brochures folder. Dosyayı karşıya yükledikten sonra Visual Studio 'ya dönün ve Çözüm Gezgini Yenile düğmesine tıklayın.After uploading the file, return to Visual Studio and click the Refresh button in the Solution Explorer. Karşıya yüklediğiniz dosyayı ~/broşürler klasörüne görmeniz gerekir!You should see the file you just uploaded in the ~/Brochures folder!

EvolutionValley. jpg dosyası Web sunucusuna yüklendiThe File EvolutionValley.jpg Has Been Uploaded to the Web Server

Şekil 14: dosya EvolutionValley.jpg Web sunucusuna yüklendi (tam boyutlu görüntüyü görüntülemek için tıklayın)Figure 14: The File EvolutionValley.jpg Has Been Uploaded to the Web Server (Click to view full-size image)

EvolutionValley. jpg, ~/broşürler klasörüne kaydedildi

Şekil 15: EvolutionValley.jpg ~/Brochures klasörüne kaydedildiFigure 15: EvolutionValley.jpg Was Saved to the ~/Brochures Folder

Karşıya yüklenen dosyaları dosya sistemine kaydetme ile ilgili alt tliklerSubtleties with Saving Uploaded Files to the File System

Karşıya yükleme dosyalarını Web sunucusu s dosya sistemine kaydederken değinilmesi gereken birkaç alt parametre vardır.There are several subtleties that must be addressed when saving uploading files to the web server s file system. İlk olarak, güvenlik sorunu vardır.First, there s the issue of security. Dosya sistemine bir dosyayı kaydetmek için, ASP.NET sayfasının yürütüldüğü güvenlik bağlamının yazma izinlerine sahip olması gerekir.To save a file to the file system, the security context under which the ASP.NET page is executing must have Write permissions. ASP.NET Development Web sunucusu, geçerli kullanıcı hesabınızın bağlamı altında çalışır.The ASP.NET Development Web Server runs under the context of your current user account. Web sunucusu olarak Microsoft s Internet Information Services (IIS) kullanıyorsanız, güvenlik bağlamı IIS sürümüne ve yapılandırmasına bağlıdır.If you are using Microsoft s Internet Information Services (IIS) as the web server, the security context depends on the version of IIS and its configuration.

Dosyaları dosya sistemine kaydetmenin bir diğer zorluğu, dosyaları adlandırmanın yerini alır.Another challenge of saving files to the file system revolves around naming the files. Şu anda sayfamız, yüklenen dosyaların tümünü, istemci s bilgisayarındaki dosyayla aynı adı kullanarak ~/Brochures dizine kaydeder.Currently, our page saves all of the uploaded files to the ~/Brochures directory using the same name as the file on the client s computer. Kullanıcı A, adı Brochure.pdfbir broşür karşıya yüklediğinde, dosya ~/Brochure/Brochure.pdfolarak kaydedilir.If User A uploads a brochure with the name Brochure.pdf, the file will be saved as ~/Brochure/Brochure.pdf. Ancak daha sonra Kullanıcı B, aynı dosya adına (Brochure.pdf) sahip olacak şekilde farklı bir broşür dosyasını karşıya yüklediğinde ne olur?But what if sometime later User B uploads a different brochure file that happens to have the same filename (Brochure.pdf)? Şimdi yaptığımız kodla, Kullanıcı B 'nin karşıya yüklenmesi ile ilgili bir s dosyasının üzerine yazılacak.With the code we have now, User A s file will be overwritten with User B s upload.

Dosya adı çakışmalarını çözmek için çeşitli teknikler vardır.There are a number of techniques for resolving file name conflicts. Bir seçenek, aynı ada sahip bir dosya zaten varsa karşıya yüklemeyi yasaklayadır.One option is to prohibit uploading a file if there already exists one with the same name. Bu yaklaşım ile, B kullanıcısı, Brochure.pdfadlı bir dosyayı karşıya yüklemeye çalıştığında, sistem dosyalarını kaydetmez ve bunun yerine, Kullanıcı B 'nin dosyayı yeniden adlandırıp tekrar denemesini bildiren bir ileti görüntüler.With this approach, when User B attempts to upload a file named Brochure.pdf, the system would not save their file and instead display a message informing User B to rename the file and try again. Başka bir yaklaşım ise, bir genel benzersiz tanımlayıcı (GUID) veya karşılık gelen veritabanı kaydı birincil anahtar sütunundan değer olabilen benzersiz bir dosya adı kullanarak dosyayı kaydetmektedir (karşıya yüklemenin veri modelindeki belirli bir satırla ilişkili olduğu varsayılırsa).Another approach is to save the file using a unique file name, which could be a globally unique identifier (GUID) or the value from the corresponding database record s primary key column(s) (assuming that the upload is associated with a particular row in the data model). Sonraki öğreticide bu seçenekleri daha ayrıntılı keşfedeceğiz.In the next tutorial we'll explore these options in more detail.

Çok büyük miktarlarda Ikili veri ile Ilgili sorunlarChallenges Involved with Very Large Amounts of Binary Data

Bu öğreticiler, yakalanan ikili verilerin boyut olarak olduğunu varsayar.These tutorials assume that the binary data captured is modest in size. Birkaç megabayt veya daha büyük miktarda ikili veri dosyası ile çalışma, Bu öğreticilerin kapsamı ötesinde yeni zorluk sergiler.Working with very large amounts of binary data files that are several megabytes or larger introduces new challenges that are beyond the scope of these tutorials. Örneğin, varsayılan olarak ASP.NET, 4 MB 'den daha fazla karşıya yüklemeyi reddeder, ancak bu, Web.config<httpRuntime> öğesi aracılığıyla yapılandırılabilirler.For example, by default ASP.NET will reject uploads of more than 4 MB, although this can be configured through the <httpRuntime> element in Web.config. IIS, kendi dosya yükleme boyutu sınırlamalarını da uygular.IIS imposes its own file upload size limitations, too. Daha fazla bilgi için bkz. IIS karşıya yükleme dosyası boyutu .See IIS Upload File Size for more information. Ayrıca, büyük dosyaları karşıya yüklemek için geçen süre varsayılan 110 saniye ASP.NET bir istek için bekleyecektir.Furthermore, the time taken to upload large files might exceed the default 110 seconds ASP.NET will wait for a request. Büyük dosyalarla çalışırken ortaya çıkan bellek ve performans sorunları da vardır.There are also memory and performance issues that arise when working with large files.

Dosya karşıya yükleme denetimi, büyük dosya yüklemeleri için pratik bir şekilde yapılır.The FileUpload control is impractical for large file uploads. Dosya içerikleri sunucuya gönderildiğinde, son kullanıcının karşıya yüklemesinin devam eden herhangi bir onay olmadan önce beklemesi gerekir.As the file s contents are being posted to the server, the end user must patiently wait without any confirmation that their upload is progressing. Bu, birkaç saniye içinde karşıya yüklenebilen küçük dosyalarla ilgilenirken çok fazla soruna neden olmaz, ancak karşıya yüklenmesi dakika süreolabilecek daha büyük dosyalarla ilgilenirken bir sorun olabilir.This is not so much an issue when dealing with smaller files that can be uploaded in a few seconds, but can be an issue when dealing with larger files that may take minutes to upload. Büyük karşıya yüklemeleri işlemeye daha uygun olan üçüncü taraf dosya yükleme denetimleri bulunur ve bu satıcıların birçoğu, daha canlı bir kullanıcı deneyimi sunan ilerleme göstergelerini ve ActiveX karşıya yükleme yöneticilerini sağlar.There are a variety of third-party file upload controls that are better suited for handling large uploads and many of these vendors provide progress indicators and ActiveX upload managers that present a much more polished user experience.

Uygulamanızın büyük dosyaları işlemesi gerekiyorsa, zorlukları dikkatle araştırmanız ve belirli gereksinimleriniz için uygun çözümler bulmanız gerekir.If your application needs to handle large files, you'll need to carefully investigate the challenges and find suitable solutions for your particular needs.

ÖzetSummary

İkili verileri yakalamak için gereken bir uygulama oluşturmak çok sayıda zorluk sağlar.Building an application that needs to capture binary data introduces a number of challenges. Bu öğreticide, ilk iki: ikili verileri nerede depolayacağınıza karar verme ve bir kullanıcının bir Web sayfası aracılığıyla ikili içeriği karşıya yüklemesine izin verme.In this tutorial we explored the first two: deciding where to store the binary data and allowing a user to upload binary content through a web page. Sonraki üç öğreticide, karşıya yüklenen verileri veritabanındaki bir kayıtla ilişkilendirmeyi ve metin veri alanları ile birlikte ikili verilerin nasıl görüntüleneceğini öğreneceğiz.Over the next three tutorials, we'll see how to associate the uploaded data with a record in the database as well as how to display the binary data alongside its text data fields.

Programlamanın kutlu olsun!Happy Programming!

Daha Fazla BilgiFurther Reading

Bu öğreticide ele alınan konular hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:For more information on the topics discussed in this tutorial, refer to the following resources:

Yazar hakkındaAbout the Author

4GuysFromRolla.com 'in, Scott Mitchell, yedi ASP/ASP. net books ve 'in yazarı, 1998 sürümünden bu yana Microsoft Web teknolojileriyle çalışmaktadır.Scott Mitchell, author of seven ASP/ASP.NET books and founder of 4GuysFromRolla.com, has been working with Microsoft Web technologies since 1998. Scott bağımsız danışman, Trainer ve yazıcı olarak çalışıyor.Scott works as an independent consultant, trainer, and writer. En son kitabı, 24 saat içinde ASP.NET 2,0 kendi kendinize eğitimister.His latest book is Sams Teach Yourself ASP.NET 2.0 in 24 Hours. mitchell@4GuysFromRolla.comadresinden erişilebilir .He can be reached at mitchell@4GuysFromRolla.com. ya da blog aracılığıyla http://ScottOnWriting.NETbulabilirsiniz.or via his blog, which can be found at http://ScottOnWriting.NET.

Özel olarak teşekkürlerSpecial Thanks To

Bu öğretici serisi birçok yararlı gözden geçirenler tarafından incelendi.This tutorial series was reviewed by many helpful reviewers. Bu öğreticide lider gözden geçirenler, bir Murphy ve Bernadette Leigh.Lead reviewers for this tutorial were Teresa Murphy and Bernadette Leigh. Yaklaşan MSDN makalelerimi gözden geçiriyor musunuz?Interested in reviewing my upcoming MSDN articles? Öyleyse, benimitchell@4GuysFromRolla.combir satır bırakın .If so, drop me a line at mitchell@4GuysFromRolla.com.