2013-02-24 1 views
0

J'ai un problème lorsque je télécharge un fichier à partir d'une URL (Ce n'est pas mon problème principal), le problème vient après cela. Le fichier que j'ai enregistré à partir de l'URL peut être une image, un document, un fichier PDF ou un fichier ZIP.Identifier le type de fichier d'un fichier/flux - VB.Net

Existe-t-il une méthode pour connaître le type de fichier lorsque le chemin n'a pas l'extension? Ou identifier le type de fichier d'un flux?

Je travaille avec Visual Studio 2010 Express Edition - Framework.Net 3.5 - Une fenêtre App

Public Function DownloadFile_FromURL(ByVal URL As String, ByVal DestinationPath As String) As Boolean 
    DownloadFile_FromURL = False 

    Try 
     Dim vRequest As Net.HttpWebRequest 
     Dim vResponse As Net.HttpWebResponse 

     vRequest = Net.WebRequest.Create(New Uri(URL)) 
     vRequest.Method = "GET" 
     vRequest.AllowAutoRedirect = True 
     vRequest.UseDefaultCredentials = True 
     vResponse = vRequest.GetResponse 

     If vResponse.ContentLength <> -1 Then 
      Dim vLen As Long = vResponse.ContentLength 
      Dim vWriteStream As New IO.FileStream(DestinationPath, IO.FileMode.CreateNew) 
      Dim vStream As IO.Stream = vResponse.GetResponseStream() 

      Dim vReadBytes() As Byte = New Byte(255) {} 
      Dim vCount As Integer = vStream.Read(vReadBytes, 0, vReadBytes.Length) 

      While vCount > 0 
       vWriteStream.Write(vReadBytes, 0, vCount) 
       vCount = vStream.Read(vReadBytes, 0, vReadBytes.Length) 
      End While 

      vWriteStream.Flush() : vWriteStream.Close() 
      vResponse.Close() : vRequest = Nothing : GCcleaner() 
      Dim v = System.IO.Path.GetExtension(DestinationPath) 

      DownloadFile_FromURL = True 
     End If 
    Catch ex As Exception 
     Throw New Exception(ex.mc_GetAllExceptions) 
    End Try 
End Function 

Répondre

0

Si vous utilisez WebRequest pour le téléchargement.

Dim uri As String = "http://domain.com/resource" 

Dim request As HttpWebRequest = DirectCast(WebRequest.Create(uri), HttpWebRequest) 
request.Method = "GET" 
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse) 

Dim contentType = response.ContentType 
' this will have the content type/ file type 

Vous pouvez maintenant avoir une routine pour enregistrer le fichier en utilisant un poste particulier en fonction du type de contenu. par exemple, un type de contenu de "image/jpeg" peut être enregistré en tant que * .jpg

+0

Le ContentType arrive en blanc ... https://lh6.googleusercontent.com/-BpICDrXzh5s/USlqRLshjfI/AAAAAAAAAjc/pN4ry8gFXuQ/s744/a.png Une autre suggestion? – MiBol

+0

@MiBol Pouvez-vous mettre à jour votre réponse avec votre code pour montrer comment vous accédez à la ressource/url? – scartag

+0

Bien sûr, je viens de mettre à jour la question – MiBol

0

Pour une image, vous pouvez le charger dans un objet Image() et voir s'il déclenche une exception OutOfMemoryException - pas une image.

PDF vous pouvez en lire les premiers octets (les informations de type de fichier PDF y sont stockées, mais vous ne savez pas exactement ce que c'est en ce moment). ZIP et DOC Je ne suis pas sûr de.

Si vous utilisez WebRequests, vous pouvez saisir le type de contenu du flux de réponses. Plus d'informations sur les types MIME/contenu ici: http://msdn.microsoft.com/en-us/library/ms775147.aspx

Questions connexes