【问题标题】:What is the easiest way to obtain `byte[]` from `BlazorInputFile.IFileStream`从`BlazorInputFile.IFileStream`获取`byte []`的最简单方法是什么
【发布时间】:2020-10-16 03:28:55
【问题描述】:

我有一个文件,用户将使用BlazorInputFile 在浏览器中选择该文件,如Steve Sanderson 所述。

选择后,我想使用 System.Security.Cryptography.MD5 计算文件的校验和,类似于 Calculate MD5 checksum for a file 的答案中描述的内容。

但是,当我尝试这个时遇到System.NotSupportedException

private string GetMd5ForFile(IFileListEntry file)
{
   using (var md5 = MD5.Create())
   {
      return Convert.ToBase64String(md5.ComputeHash(this.file.Data));
   }
}

一些异常细节是:

 > Message: "Synchronous reads are not supported"
 > Source : "BlazorInputFile"
 > Stack  : "at BlazorInputFile.FileListEntryStream.Read(Byte[] buffer, Int32 offset, Int32 count)"

我知道ComputeHash() 接受byte 的数组。到目前为止,我尝试将 BlazorInputFile 的流转换为熟悉的类型,或者使用自己的方法将字节读取到数组中 FileStream,但没有成功。

【问题讨论】:

    标签: c# .net md5 blazor blazorinputfile


    【解决方案1】:

    我最终这样做了:

    
    private async Task<string> GetMd5ForFile(IFileListEntry file) {
        using (var md5 = MD5.Create()) {
            var data = await file.ReadAllAsync();
            return Convert.ToBase64String(md5.ComputeHash(data.ToArray()));
        }
    }
    
    

    【讨论】:

    • 您的答案不符合您自己的问题标题...
    • 确实如此。到目前为止,这是我对整个场景的唯一答案。希望能有更好的信息出现。标题反映了作为一名工作程序员的问题呈现给我的方式,因此其他人可能会以这种方式出现 - 但答案和标题都不是完美的。刚刚接受。 “接受答案并不意味着是一个明确的和最终的声明,表明这个问题现在已经得到了完美的回答。它只是意味着作者收到了一个对他们个人有用的答案。”感谢您的输入。 stackoverflow.com/help/accepted-answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2019-04-21
    • 2023-03-13
    相关资源
    最近更新 更多