2009-04-19 13 views
3

Salut à tous ici le code alors je vais vous expliquer ma question: -Si (fileUpload.HasFile) = false

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 

chaque fois que je passage dans le code, il dit que (fileUpload.HasFile)=false et ne voit jamais le code après cela, alors sauts à l'autre statment et c'est le reste du 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 
+0

Quelle langue utilisez-vous? –

+0

vb.net avec la base de données sql –

Répondre

0

Je pense qu'il pourrait être que vous écrivez vous déposez dans le répertoire et en faisant cela, il efface le formulaire de fileupload. Cela se produit avant d'exécuter votre instruction if. Essayez de déplacer votre if/else au-dessus de la fonction "handleuploadedfile()". Cela devrait vous assurer que vous pouvez vérifier le formulaire de téléchargement avant que le système écrit le fichier et le supprime du formulaire de téléchargement.

3

La raison pour laquelle fileUpload.HasFiles = False est que lorsque le code est atteint, le flux de fichier a été fermé à l'intérieur du sous-programme HandleUploadFile.

« cette déclaration en utilisant ferme le flux d'entrée d'origine et il supprime » de la FileUpload

Using stream As System.IO.Stream = fi.InputStream    
stream.Read(fileBytes, 0, fi.ContentLength)   
End Using 
6

Vérifiez si you'r en utilisant un UpdatePanel, si oui, à Page.Init faire quelque chose comme ceci:

protected void userView_Init(object sender, EventArgs e) 
{ 
ScriptManager.GetCurrent(this).RegisterPostBackControl(uploadFileButton); 
} 
+0

C'est ce qui nous l'a fixé. Vous pouvez éventuellement ajouter une ligne PostBackTrigger dans la section Triggers de UpdatePanel au lieu de la gérer dans Init. –