大家一般都在某站点上上传过图片并让站点显示在特定的位置以供浏览。在ASP.NET2.0里这个过程是怎样的呢? 大家都知道动态站点的数据一般都存在数据文件里,那么图片呢?图片也是数据,应该也存在数据库里吧?对,图片是一种数据,它的确可以完完整整地save在数据库里,但是我们知道,图片文件的数据是很大的,如果存储在数据库中,那么打开的时候将很消耗内存,搞不好机器还会崩溃。所以一般现在用的技术都是把通过用户把图形文件通过可用的协议上传到站点的存储设备上,然后把其文件名存在相应的数据库记录里,在显示图片的时候让程序调用。
ASP.NET2.0提供了一个控件:FileUpload,它可以在页面上添加由自己生成的带有浏览按钮的文本框,但是没有用于上传的按钮,这个按钮要自己添加并写代码:
protected void Button1_Click(object sender, EventArgs e)
{
string ImagesFolder = "MatchImages";
string saveFile;
string savePath;
if (FileUpload1.HasFile)
{
try
{
savePath = Path.Combine(Request.PhysicalApplicationPath, ImagesFolder);
saveFile = Path.Combine(savePath, FileUpload1.FileName);
FileUpload1.SaveAs(saveFile);
FileUploadReport.Text = "Your file was uploaded successfully.";
SqlDataSourceGreateGalleryRecord.Insert();
}
catch (Exception exUpload)
{
FileUploadReport.Text = exUpload.Message;
} }
这三行代码就是把图片存储到服务器上指定的位置:
savePath = Path.Combine(Request.PhysicalApplicationPath, ImagesFolder);
saveFile = Path.Combine(savePath, FileUpload1.FileName);//这两行指定位置
FileUpload1.SaveAs(saveFile);//上传
这行代码用于执行数据库的插入操作,就是插入一行记录:
SqlDataSourceGreateGalleryRecord.Insert();
还有一部分相关的代码在源文件中,具体如下:<asp:SqlDataSource ID="SqlDataSourceGreateGalleryRecord" runat="server" ConflictDetection="CompareAllValues"
ConnectionString="<%$ ConnectionStrings:WroxUnited %>" DeleteCommand="DELETE FROM [Gallery] WHERE [PictureID] = @original_PictureID AND [FixtureID] = @original_FixtureID AND [UploadedByMemberName] = @original_UploadedByMemberName AND [Notes] = @original_Notes AND [PictureURL] = @original_PictureURL"
InsertCommand="INSERT INTO [Gallery] ([FixtureID], [UploadedByMemberName], [Notes], [PictureURL]) VALUES (@FixtureID, @UploadedByMemberName, @Notes, @PictureURL)"
OldValuesParameterFormatString="original_{0}" SelectCommand="SELECT * FROM [Gallery]"
UpdateCommand="UPDATE [Gallery] SET [FixtureID] = @FixtureID, [UploadedByMemberName] = @UploadedByMemberName, [Notes] = @Notes, [PictureURL] = @PictureURL WHERE [PictureID] = @original_PictureID AND [FixtureID] = @original_FixtureID AND [UploadedByMemberName] = @original_UploadedByMemberName AND [Notes] = @original_Notes AND [PictureURL] = @original_PictureURL">
这是一些数据库的查询命令,ConnectionString="<%$ ConnectionStrings:WroxUnited %>"这段代码的意思是使用存放于WEB.CONFIG文件里的名为WroxUnited 的内容作为连接字符串。
一些具体的参数定义如下: <InsertParameters>
<InsertParameters>
<asp:ControlParameter Name="FixtureID" ControlID="ListBox1" PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter Name="UploadedByMemberName" ControlID="TextBoxMemberName" PropertyName="Text" Type="String" />
<asp:ControlParameter Name="Notes" ControlID="TextBoxNotes" PropertyName="Text" Type="String" />
<asp:ControlParameter Name="PictureURL" ControlID="FileUpload1" PropertyName="FileName" Type="String" />
</InsertParameters>
因为这个例子是把图片的名称作为以个字段存储于数据库,所以只用到Insert方法, <asp:ControlParameter Name="PictureURL" ControlID="FileUpload1" PropertyName="FileName" Type="String" />这行表示把FileUpload控件的FileName属性作为参数。
当要把图片读取出来的时候可能会用到Image这个控件,当然还有其他办法^_^