将大型httppostedfilebase转换为byte []

问题描述 投票:0回答:1

我想将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.

任何解决方案

c# asp.net-mvc out-of-memory
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.