【问题标题】:Send file back in a readable format?以可读格式发回文件?
【发布时间】:2013-10-05 18:00:43
【问题描述】:

我希望有人能对此有所了解。令我懊恼的是,我意识到 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 变量包含文件信息,我只需要将其转换为可读格式...不过,我遇到了困难。

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

【问题讨论】:

  • "do not support any type of file reader" 我们在谈论什么类型的文件?您不可能期望浏览器支持所有类型的文件,对吗?
  • @JonathonReinhart:指的是HTML5 FileReader() 接口,不仅仅是解析一些文件的通用概念。 afaik,FileReader 可以打开任何文件,甚至比计算机的 RAM 还大。

标签: c# javascript forms file rest


【解决方案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 的较大文件,则必须对其进行显着不同的编码,但我假设您希望对文件大小设置合理的限制,以避免出现内存不足异常或必须缓存文件到硬盘。

【讨论】:

    【解决方案2】:

    您正在寻找 C#,对吗?

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

    这应该获取文件上传控件的内容并将其放入 base64。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2019-08-07
      • 1970-01-01
      • 2018-11-10
      • 1970-01-01
      相关资源
      最近更新 更多