当我不知道内容类型时如何返回文件结果

时间:2010-03-30 04:09:43

标签: asp.net-mvc

我有一个asp.net mvc动作,它返回一个文件结果。在幕后,它只是从目录返回一个文件。 FilePathResult需要内容类型,但我不知道。

如果我只有文件的路径可用,那么返回文件结果的正确方法是什么?

2 个答案:

答案 0 :(得分:11)

获取文件扩展名,并在注册表中查找。它的条目将具有“内容类型”属性。

以下是从控制器操作返回FilePathResult的完整示例:

string filePysicalPath, fileName; //these need to be set to your values.

var reg = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey( Path.GetExtension( filename ).ToLower() );
string contentType = "application/unknown";

if ( reg != null )
{
    string registryContentType = reg.GetValue( "Content Type" ) as string;

    if ( !String.IsNullOrWhiteSpace( registryContentType ) )
    {
        contentType = registryContentType;
    }
}

return File( filePysicalPath, contentType, filename );

答案 1 :(得分:0)

这种方法不会在注册表中起作用

    private FileResult CreateFileResult(byte[] file, string fileName)
    {
        var cd = new ContentDisposition
        {
            FileName = fileName,
            Inline = false
        };

        this.HttpContext.Response.Headers.Add("Content-Disposition", cd.ToString());
        return this.File(file, MediaTypeNames.Application.Octet);
    }