Windows下载Amazon S3对象表示文件已损坏

我目前使用.NET SDK从Amazon S3下载文件,我目前有以下代码来执行此操作(只允许这些文件):

    With request
        .WithBucketName(bucketName)
        .WithKey(key)
    End With
    response2 = client.GetObject(request)
    Dim strReader As MemoryStream = New MemoryStream
    response2.ResponseStream.CopyTo(strReader)

    Response.ContentType = getContentType(key)
    Response.OutputStream.Write(strReader.GetBuffer, 0, strReader.GetBuffer.Length)
    Dim fileName As String = Path.GetFileName(key)
    Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName)
    Return ""

End Function
Private Function getContentType(ByVal fileToContent As String) As String
    Dim fileExtension As String = Path.GetExtension(fileToContent)
    Dim contentType As String
    Select Case fileExtension
        Case ".bmp"
            contentType = "image/bmp"
        Case ".png"
            contentType = "image/png"
        Case ".xlsx", ".xls"
            contentType = "application/vnd.ms=excel"
        Case ".jpg", ".jpeg", ".gif"
            contentType = "image/jpeg"
        Case ".pdf"
            contentType = "application/pdf"
        Case ".ppt", ".pptx"
            contentType = "application/vnd.ms-powerpoint"
        Case ".doc", ".docx"
            contentType = "application/msword"
        Case Else
            contentType = "text/plain"
    End Select
    Return contentType
End Function

我有两个问题:第一,当我尝试打开客户端窗口上的文件时告诉我(对于MS Office文件)文件已损坏,有时会设法打开它们,有时不会。 其次,如果我的文件有类似.pptx的扩展名,并且我在内容类型中说'PowerPoint',那么浏览器似乎会试图向它们附加一个扩展名,如'.ppt'或'.doc'。 有什么办法解决这个问题?

编辑:我打开MS Office文件时得到的实际消息:'PowerPoint在PowerPointFile.ppt中发现无法读取的内容。 你想恢复本演示文稿的内容吗? 如果您信任此演示文稿的来源,请单击是。


好的,对于#1,不要在MemoryStream上使用GetBuffer 。 使用ToArray

Dim bytes = strReader.ToArray()
Response.OutputStream.Write(bytes, 0, bytes.Length) 

GetBuffer返回缓冲区,而不是写入流的内容。

对于#2,您需要为.***x Office文档使用不同的MIME类型。 看这里。

链接地址: http://www.djcxy.com/p/45457.html

上一篇: Downloading Amazon S3 objects, Windows says files are corrupted

下一篇: picking PDF files using Intent in android