以可读格式发回文件?

时间:2013-10-05 18:00:43

标签: c# javascript forms file rest

我希望有人可以对此有所了解。令我懊恼的是,我意识到IE8和IE9等浏览器不支持任何类型的文件阅读器。

所以经过一些研究,我试图让服务器读取文件的内容,将其转换为base64,然后将其发送回客户端,javascript从那里获取它。

这可能吗?你会怎么推荐这样做?

例如,我现在已经设置了一个RESTful服务,在提交表单后获取文件......

public string Post()
    {
        string readableFile="";
        HttpResponseMessage result = null;
        var httprequest = HttpContext.Current.Request;
        if (httprequest.Files.Count > 0)
        {
            foreach (string file in httprequest.Files)
            {
                var postedFile = httprequest.Files[file];
                //convert to base64? somehow?
            }
        }
        return readableFile;

    }

postedFile变量包含文件信息,我只需要将其变成可读格式......但是,我遇到了困难。

非常感谢任何想法或帮助!

2 个答案:

答案 0 :(得分:1)

你正在寻找C#,对吧?

string sixtyfour = System.Convert.ToBase64String(
                       myFileUploadControl.FileBytes,
                       0,
                       myFileUploadControl.FileBytes.Length);

应该获取fileupload控件的内容并将其放入base64。

答案 1 :(得分:1)

HttpPostedFile类具有InputStream属性,您可以使用该属性来读取数据。要将该数据转换为base64字符串,您可以执行以下操作:

public string Post(HttpPostedFile file)
{
    if (file.InputStream.Length > Int32.MaxValue) // Or some other file length limitation
        throw new HttpResponseException(HttpStatusCode.BadRequest);

    int length = (int)file.InputStream.Length;

    byte[] buffer = new byte[length];

    file.InputStream.Read(buffer, 0, length);

    string encodedString = Convert.ToBase64String(buffer);

    return encodedString;
}

如果要支持超过4GB的大文件,则必须以不同的方式对其进行编码,但我假设您要设置合理的文件大小限制,以避免出现内存不足或必须缓存文件到了硬盘。