头部分添加如下的代码,这很重要,因为我们不希望将一个不符合条件的上传文 件存储在文件系统。
// Reference the PictureUpload FileUpload
FileUpload PictureUpload =
(FileUpload) Categories.Rows[e.RowIndex].FindControl("PictureUpload");
if (PictureUpload.HasFile)
{
// Make sure the picture upload is valid
if (ValidPictureUpload(PictureUpload))
{
e.NewValues["picture"] = PictureUpload.FileBytes;
}
else
{
// Invalid file upload, cancel update and exit event handler
e.Cancel = true;
return;
}
}
ValidPictureUpload(FileUpload)方法只有一个FileUpload控件 类型的输入参数,通过检查上传文件的扩展符以确保上传的文件为JPG格式。只有 当上传了文件时才会调用该方法;如果没有文件上传,参数picture就只能使用其 默认值—null。如果上传了图片,且ValidPictureUpload方法返回值true, 将用图片的二进制数据对参数picture赋值。如果ValidPictureUpload方法返回值 false,则取消更新,并退出事件处理器。
ValidPictureUpload (FileUpload)方法的代码如下:
private bool ValidPictureUpload(FileUpload PictureUpload)
{
// Make sure that a JPG has been uploaded
if (string.Compare (System.IO.Path.GetExtension(PictureUpload.FileName),
".jpg", true) != 0 &&
string.Compare (System.IO.Path.GetExtension(PictureUpload.FileName),
".jpeg", true) != 0)
{
UploadWarning.Text =
"Only JPG documents may be used for a category''s picture.";
UploadWarning.Visible = true;
return false;
}
else
{
return true;
}
}
第8步:将原始几个类的图片替换为JPG格式
回想起最开始 的那8个类的图片为位图文件其包含一个OLE报头。现在我们添加了新功能以编辑 现有记录的图片,花几分钟将这些位图文件替换为JPG文件。如果你想使当前类的 图片不变,你可以通过下面的布置将其转换为JPG格式:
1.将这些位图保 存在硬盘。在浏览器里访问UpdatingAndDeleting.aspx页面,对这8个类的图片, 点右键,选则保存图片。
2.在一个图片编辑器(比如Microsoft Paint) 软件里打开图片。
3.将图片保存为JPG格式
4.在编辑界面里,用 JPG图片更新类的picture
完成更新并上传JPG图片之后,图片不会呈现在 浏览器里,原因是DisplayCategoryPicture.aspx将尝试对最开始8个类的图片剥 离OLE报头。怎样修正呢?我们将剥离OLE报头的代码移除。这样, DisplayCategoryPicture.aspx页面的Page_Load事件处理器的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
int categoryID = Convert.ToInt32(Request.QueryString ["CategoryID"]);
// Get information about the specified category
CategoriesBLL categoryAPI = new CategoriesBLL();
Northwind.CategoriesDataTable categories = _
categoryAPI.GetCategoryWithBinaryDataByCategoryID (categoryID);
Northwind.CategoriesRow category = categories [0];
// For new categories, images are JPGs...
// Output HTTP headers providing information about the binary data
Response.ContentType = "image/jpeg";
// Output the binary data
Response.BinaryWrite (category.Picture);
}
注意:
UpdatingAn |