将大型httppostedfilebase转换为byte []

时间:2018-01-04 09:43:06

标签: c# asp.net-mvc out-of-memory

我想将httppostedfilebase类型转换为byte []类型。 我使用这段代码:

    private static byte[] ConverToBytes(HttpPostedFileBase file)
    {
        int fileSizeInBytes = file.ContentLength; //134675091 (129MB)
        MemoryStream target = new MemoryStream();
        file.InputStream.CopyTo(target);//System.OutOfMemoryException
        byte[] data = target.ToArray();

        return data;
    }

当我使用此代码时,我得到System.OutOfMemoryException.

任何关于它的灵魂事件

1 个答案:

答案 0 :(得分:0)

实际上,您可以使用MemoryStream创建多个字节流副本,这就是抛出OutOfMemoryException的原因。请改用BinaryReader

private static byte[] ConvertToBytes(HttpPostedFileBase file)
{
    int fileSizeInBytes = file.ContentLength;
    byte[] data = null;
    using (var br = new BinaryReader(file.InputStream))
    {
        data = br.ReadBytes(fileSizeInBytes);
    }

    return data;
}

注意:我强烈建议using语句包装所有使用内存空间的实例创建,并实现像IDisposable这样的MemoryStream

类似问题:

Convert HttpPostedFileBase to byte[] array