0

URL からファイルをダウンロードするときに問題が発生します (これは私の主な問題ではありません)。問題はその後に発生します。URL から保存したファイルは、画像、ドキュメント、PDF、または ZIP です。

パスに拡張子がない場合にファイルの種類を知る方法はありますか? または、ストリームからファイルの種類を識別しますか?

Visual Studio 2010 Express Edition - Framework.Net 3.5 - A Window 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
4

2 に答える 2

0

ダウンロードに WebRequest を使用している場合。

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

コンテンツ タイプに応じて特定の拡張子を使用してファイルを保存するルーチンを使用できるようになりました。たとえば、「image/jpeg」のコンテンツ タイプは *.jpg として保存できます。

于 2013-02-24T00:53:33.510 に答える
0

画像の場合は、それを Image() オブジェクトにロードして、画像ではなく OutOfMemoryException がスローされるかどうかを確認できます。

PDF ファイルの最初の数バイトを読み取ることができます (PDF ファイルの種類の情報はそこに保存されていますが、現時点では正確にはわかりません)。

ZIPとDOCはよくわかりません。

WebRequests を使用している場合は、応答ストリームのコンテンツ タイプを取得できます。MIME/コンテンツ タイプの詳細については、http: //msdn.microsoft.com/en-us/library/ms775147.aspxをご覧ください。

于 2013-02-24T00:57:05.353 に答える