Reputation:
hi all here the code then i will explain my question:-
Protected Sub btnupload_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnUpload.Click
If (IsPostBack) Then
HandleUploadedFile()
Dim savePath As String = "Images\"
If (fileUpload.HasFile) Then
Dim fileName As String = fileUpload.FileName
savePath = Server.MapPath(savePath) + fileName
fileUpload.SaveAs(savePath)
Me.Label1.Text = "Your file was saved as " & fileName
adp.Insert(fileUpload.FileName)
Else
Me.Label1.Text = "You did not specify a file to upload."
End If
End If
End Sub
every time i track the code it says that (fileUpload.HasFile)=false
and never sees the code after that, then jumps to the else statment and thats the rest of the code
Private Sub HandleUploadedFile()
' get the root of the web site
Dim root As String = Server.MapPath("~/")
' clean up the path
If Not root.EndsWith("\") Then
root += "\"
End If
' make a folder to store the images in
Dim fileDirectory As String = root & "Images/"
' create the folder if it does not exist
If Not System.IO.Directory.Exists(fileDirectory) Then
System.IO.Directory.CreateDirectory(fileDirectory)
End If
' make a link to the new file
Dim link As String = "<a href='Images/{0}' target='_blank'>{1}</a>{2}{3}"
' loop through the file in the request
For i As Integer = 0 To Request.Files.Count - 1
' get the file instance
Dim fi As HttpPostedFile = Request.Files.[Get](i)
' create a byte array to store the file bytes
Dim fileBytes As Byte() = New Byte(fi.ContentLength - 1) {}
' fill the byte array
Using stream As System.IO.Stream = fi.InputStream
stream.Read(fileBytes, 0, fi.ContentLength)
End Using
' create a random file name
Dim fileName As String = Guid.NewGuid().ToString()
'write the original file to the file system
File.WriteAllBytes(fileDirectory + fileName & ".jpg", fileBytes)
litText.Text += String.Format(link, fileName & ".jpg", fileName & " Original", "<br/>", "")
' write the resized file to the file system
File.WriteAllBytes(fileDirectory + fileName & "_small.jpg", ResizeImageFile(fileBytes, 100))
litText.Text += String.Format(link, fileName & "_small.jpg", fileName & " Small", "<br/>", "<br/>")
' cleanup
litText.Visible = True
fileBytes = Nothing
Next
End Sub
Private Shared Function ResizeImageFile(ByVal imageFile As Byte(), ByVal targetSize As Integer) As Byte()
Using oldImage As System.Drawing.Image = System.Drawing.Image.FromStream(New MemoryStream(imageFile))
Dim newSize As Size = CalculateDimensions(oldImage.Size, targetSize)
Using newImage As New Bitmap(newSize.Width, newSize.Height, PixelFormat.Format24bppRgb)
Using canvas As Graphics = Graphics.FromImage(newImage)
canvas.SmoothingMode = SmoothingMode.AntiAlias
canvas.InterpolationMode = InterpolationMode.HighQualityBicubic
canvas.PixelOffsetMode = PixelOffsetMode.HighQuality
canvas.DrawImage(oldImage, New Rectangle(New Point(0, 0), newSize))
Dim m As New MemoryStream()
newImage.Save(m, ImageFormat.Jpeg)
Return m.GetBuffer()
End Using
End Using
End Using
End Function
Private Shared Function CalculateDimensions(ByVal oldSize As Size, ByVal targetSize As Integer) As Size
Dim newSize As New Size()
If oldSize.Height > oldSize.Width Then
newSize.Width = CInt((oldSize.Width * (CSng(targetSize) / CSng(oldSize.Height))))
newSize.Height = targetSize
Else
newSize.Width = targetSize
newSize.Height = CInt((oldSize.Height * (CSng(targetSize) / CSng(oldSize.Width))))
End If
Return newSize
End Function
End Class
Upvotes: 3
Views: 13093
Reputation: 933
Check if you'r using a UpdatePanel, if so then in Page.Init do something like this:
protected void userView_Init(object sender, EventArgs e)
{
ScriptManager.GetCurrent(this).RegisterPostBackControl(uploadFileButton);
}
Upvotes: 6
Reputation: 51468
The reason why fileUpload.HasFiles = False
is that by the time that code is reached, the file stream has been closed inside of the HandleUploadFile Subroutine.
'this using statement closes the original input stream and there removes it 'from the FileUpload
Using stream As System.IO.Stream = fi.InputStream
stream.Read(fileBytes, 0, fi.ContentLength)
End Using
Upvotes: 3
Reputation: 81
I think it might be that you write you file to the directory and in doing that it clears out the fileupload form. This is happening before you run your if statement. Try moving your if/else above the "handleuploadedfile()" function. This should ensure that you can check the upload form before the system writes the file and removes it from the upload form.
Upvotes: 0