嗨,我有以下子程序 它要求用戶保存或另存爲文件 的問題是,它保存它沒有擴展名。下載文件無法識別文件類型/文件擴展名?
文件類型爲GIF或PDF。 有沒有辦法讓例程自動找出它是PDF還是GIF?
可變sFullPath具有例如 sFullPath = C延伸 :\ PICTURES \ 10603-1.gif或 sFullPath = C:\ 10603-1.pdf
截圖\ PICTURES,注意如何保存如文件對話框不給任何分機
這裏是我的代碼
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
您是否嘗試過將它添加到與內容部署頭設置文件名? –
解決!我在這裏總是小菜一碟。非常感謝。我怎麼不能將你的評論標記爲答案? – BobNoobGuy
你不能評論評論。我添加了一個答案。很高興知道它的工作! –