使用gif,jpg,png等上传图片

时间:2010-12-05 15:42:51

标签: asp.net

我有一个应用程序,用户可以上传图片。

以下代码仅允许jpg图像,但我想将其扩展为gif,png。

代码如下:

Imports System.Data
Imports System.IO
Imports System.Data.SqlClient

Partial Class PhotoAdmin_Default
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        UserIdValue.Text = Membership.GetUser().ProviderUserKey.ToString()
        cannotUploadImageMessage.Visible = False
    End Sub

    Protected Sub dvPictureInsert_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dvPictureInsert.ItemInserted
        'If the record was successfully inserted, save the picture
        If e.AffectedRows > 0 Then
            'Determine the maximum pictureID for this user
            Dim results As DataView = CType(maxPictureIDDataSource.Select(DataSourceSelectArguments.Empty), DataView)
            Dim pictureIDJustAdded As Integer = CType(results(0)(0), Integer)
            'Reference the FileUpload control
            Dim imageUpload As FileUpload = CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)
            If imageUpload.HasFile Then
                Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
                imageUpload.SaveAs(baseDirectory & pictureIDJustAdded & ".jpg")
            End If
        End If
        If e.Exception Is Nothing Then
            ' Use the AffectedRows property to determine whether the
            ' record was inserted. Sometimes an error might occur that 
            ' does not raise an exception, but prevents the insert
            ' operation from completing.
            If e.AffectedRows = 1 Then
                MessageLabel.Text = "Record inserted successfully."
            Else
                MessageLabel.Text = "An error occurred during the insert operation."
                ' Use the KeepInInsertMode property to remain in insert mode
                ' when an error occurs during the insert operation.
                e.KeepInInsertMode = True
            End If
        Else
            ' Insert the code to handle the exception.
            MessageLabel.Text = e.Exception.Message
            ' Use the ExceptionHandled property to indicate that the 
            ' exception has already been handled.
            e.ExceptionHandled = True
            e.KeepInInsertMode = True
        End If
    End Sub


    Protected Sub dvPictureInsert_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dvPictureInsert.ItemInserting
        Dim cancelInsert As Boolean = False

        Dim imageUpload As FileUpload =CType(dvPictureInsert.FindControl("imageUpload"), FileUpload)
        If Not imageUpload.HasFile Then
            cancelInsert = True
        Else
            If Not imageUpload.FileName.ToUpper().EndsWith(".JPG") Then
                cancelInsert = True 'Invalid image file!

            Else
                Dim image As System.Drawing.Image = System.Drawing.Image.FromStream(imageUpload.PostedFile.InputStream)
                If image.Width > 950 Or image.Height > 950 Then
                    cancelInsert = True
                End If
            End If
        End If
        If cancelInsert Then
            e.Cancel = True
            cannotUploadImageMessage.Visible = True
        End If
        'Set the UserId value to the currently logged on user's ID
        e.Values("UserId") = Membership.GetUser().ProviderUserKey
        'Set the UploadedOn value to the current date/time
        e.Values("UploadedOn") = DateTime.Now
    End Sub
    Protected Sub gvPictures_RowDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeletedEventArgs) Handles gvPictures.RowDeleted
        Dim baseDirectory As String = Server.MapPath("~/UploadedImages/")
        Dim fileName As String = baseDirectory & e.Keys("PictureID") & ".jpg"
        File.Delete(fileName)
    End Sub
    Protected Sub gvPictures_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvPictures.RowUpdating
        e.NewValues("UserId") = Membership.GetUser().ProviderUserKey
    End Sub


End Class

1 个答案:

答案 0 :(得分:1)

以下行似乎正在检查文件扩展名:

If Not imageUpload.FileName.ToUpper().EndsWith(".JPG") Then
    cancelInsert = True 'Invalid image file!

您可以修改它以便它也接受其他文件类型:

Dim acceptedExtensions = New String() { ".jpg", ".png", ".gif" }
If Not acceptedExtensions.Contains(imageUpload.FileName, StringComparer.OrdinalIgnoreCase) Then
    cancelInsert = True 'Invalid image file!
End If

另一个细微的修改包括不对.jpg扩展名进行硬编码,而只是使用上传文件的扩展名:

Path.GetExtension(imageUpload.FileName)