2013-10-16 106 views
0

嗨,我有以下子程序 它要求用戶保存或另存爲文件 的問題是,它保存它沒有擴展名。下載文件無法識別文件類型/文件擴展名?

文件類型爲GIF或PDF。 有沒有辦法讓例程自動找出它是PDF還是GIF?

可變sFullPath具有例如 sFullPath = C延伸 :\ PICTURES \ 10603-1.gif或 sFullPath = C:\ 10603-1.pdf

截圖\ PICTURES,注意如何保存如文件對話框不給任何分機


enter image description here


enter image description here


enter image description here


這裏是我的代碼

Private Sub DownloadFile(sFullPath As String, context As HttpContext) 

    Dim size, start, [end], length As Long 
    Dim fp As Long = 0 
    Using reader As New StreamReader(sFullPath) 

     size = reader.BaseStream.Length 
     start = 0 
     [end] = size - 1 
     length = size 

     ' Now that we've gotten so far without errors we send the accept range header 
     '/* At the moment we only support single ranges. 
     ' * Multiple ranges requires some more work to ensure it works correctly 
     ' * and comply with the spesifications: http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.2 
     ' * 
     ' * Multirange support annouces itself with: 
     ' * header('Accept-Ranges: bytes'); 
     ' * 
     ' * Multirange content must be sent with multipart/byteranges mediatype, 
     ' * (mediatype = mimetype) 
     ' * as well as a boundry header to indicate the various chunks of data. 
     ' */ 

     context.Response.AddHeader("Accept-Ranges", "0-" & size) 

     ' header('Accept-Ranges: bytes'); 
     ' multipart/byteranges 
     ' http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.2 

     If Not String.IsNullOrEmpty(context.Request.ServerVariables("HTTP_RANGE")) Then 

      Dim anotherStart As Long = start 
      Dim anotherEnd As Long = [end] 

      Dim arr_split As String() = context.Request.ServerVariables("HTTP_RANGE").Split(New Char() {Convert.ToChar("=")}) 

      Dim range As String = arr_split(1) 

      ' Make sure the client hasn't sent us a multibyte range 
      If range.IndexOf(",") > -1 Then 

       '// (?) Shoud this be issued here, or should the first 
       '// range be used? Or should the header be ignored and 
       '// we output the whole content? 

       context.Response.AddHeader("Content-Range", "bytes " & start & "-" & [end] & "/" & size) 

       Throw New HttpException(416, "Requested Range Not Satisfiable") 
      End If 

      '// If the range starts with an '-' we start from the beginning 
      '// If not, we forward the file pointer 
      '// And make sure to get the end byte if spesified 

      If (range.StartsWith("-")) Then 

       '// The n-number of the last bytes is requested 

       anotherStart = size - Convert.ToInt64(range.Substring(1)) 



      Else 

       arr_split = range.Split(New Char() {Convert.ToChar("-")}) 

       anotherStart = Convert.ToInt64(arr_split(0)) 
       Dim temp As Long = 0 

       anotherEnd = If(arr_split.Length > 1 And Int64.TryParse(arr_split(1).ToString(), temp), Convert.ToInt64(arr_split(1)), size) 

      End If 

      '/* Check the range and make sure it's treated according to the specs. 
      ' * http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 
      ' */ 
      '// End bytes can not be larger than $end. 

      'anotherEnd = (anotherEnd > [end]) ? end : anotherEnd 
      anotherEnd = If((anotherEnd > [end]), [end], anotherEnd) 
      '// Validate the requested range and return an error if it's not correct. 
      If (anotherStart > anotherEnd Or anotherStart > size - 1 Or anotherEnd >= size) Then 
       context.Response.AddHeader("Content-Range", "bytes " & start & "-" & [end] & "/" & size) 
       Throw New HttpException(416, "Requested Range Not Satisfiable") 
      End If 
      start = anotherStart 
      [end] = anotherEnd 

      length = [end] - start + 1 ' Calculate new content length 
      fp = reader.BaseStream.Seek(start, SeekOrigin.Begin) 
      context.Response.StatusCode = 206 
     End If 
    End Using 
    '// Notify the client the byte range we'll be outputting 
    context.Response.AddHeader("Content-Range", "bytes " & start & "-" & [end] & "/" & size) 
    context.Response.AddHeader("Content-Length", length.ToString()) 
    '// Start buffered download 
    context.Response.WriteFile(sFullPath, fp, length) 
    context.Response.End() 
End Sub 
+1

您是否嘗試過將它添加到與內容部署頭設置文件名? –

+0

解決!我在這裏總是小菜一碟。非常感謝。我怎麼不能將你的評論標記爲答案? – BobNoobGuy

+0

你不能評論評論。我添加了一個答案。很高興知道它的工作! –

回答

1

你應該嘗試將它添加到頁眉設置內容處置。這將允許你指定一個文件名。

0

當你打開對話框中保存文件,擴展名是空的()。 將文件名保存爲「YourFileName.txt」或「YourFileName.pdf」。 如果您仍有麻煩嘗試不同名稱與擴展名。

相關問題