Upload Large files(1GB)-ASP.net

2020-01-31 03:46发布

I need to upload large files of at least 1GB file size. I am using ASP.Net, C# and IIS 5.1 as my development platform.

I am using:

HIF.PostedFile.InputStream.Read(fileBytes,0,HIF.PostedFile.ContentLength)

before using:

File.WriteAllBytes(filePath, fileByteArray)

(doesnt go here but gives System.OutOfMemoryException exception)

Currently I have set the httpRuntime to:

executionTimeout="999999" maxRequestLength="2097151"(thats 2GB!) useFullyQualifiedRedirectUrl="true" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="5000" enableVersionHeader="true" requestLengthDiskThreshold="8192"

Also i have set maxAllowedContentLength="**2097151**" (guess its only for IIS7)

I have changed IIS connection timeout to 999,999 secs too.

I am unable to upload files of even 4578KB (Ajaz-Uploader.zip)

标签: c# .net
8条回答
够拽才男人
2楼-- · 2020-01-31 04:16

We have an app that occasionally needs to upload 1 and 2 GB files, so has been running into this as well. After much research, my conclusion is that we need to implement the previously mentioned NeatUpload, or something like it.

Also, be aware that

<requestLimits maxAllowedContentLength=.../>

is measured in bytes, while

<httpRuntime maxRequestLength=.../>

is measured in kilobytes. So your values should look more like this:

<httpRuntime maxRequestLength="2097151"/>
...
<requestLimits maxAllowedContentLength="2097151000"/>
查看更多
beautiful°
3楼-- · 2020-01-31 04:21

Check this blog entry about large file uploads. It also has a few links to some discussion forums that can shed some light on this as well. The suggestion is to use custom HttpHandler for that or custom Flash/Silverlight control.

查看更多
一纸荒年 Trace。
4楼-- · 2020-01-31 04:23

I know it is an old question, but still unanswered.

So this is what you have to do:

In you web.config file, add this in :

    <!-- 3GB Files / in kilobyte (3072*1024) -->
    <httpRuntime targetFramework="4.5" maxRequestLength="3145728"/>

and this under

<security>
    <requestFiltering>

      <!-- 3GB Files / in byte (3072*1024*1024) -->
      <requestLimits maxAllowedContentLength="3221225472" />

    </requestFiltering>
</security>

You see in the comment how this works. In one you need to have the sie in bytes and in the other one in kilobytes. Hope that helps.

查看更多
叛逆
5楼-- · 2020-01-31 04:24

Setting maxRequestLength should be enough for uploading files larger than 4mb, which is the default limit for HTTP request size. Please make extra sure that nothing is overriding your config file.

Alternatively you can check the async upload provided by Telerik, which uploads files by 2mb chunks and effectively can bypass the ASP.NET request size limitation.

查看更多
【Aperson】
6楼-- · 2020-01-31 04:25

I think you should use Response.TransmitFile, this method does not load in web server memory the file, it streams the file without using web server resources.

if (Controller.ValidateFileExist())
        {
            ClearFields();
            Response.Clear();
            Response.ContentType = "text/plain";
            Response.AddHeader("content-disposition", String.Format("attachment; filename={0}", "FileNAme.Ext"));
            Response.TransmitFile(FileNAme.Ext);
            Response.End();
            Controller.DeleteFile();
        }
查看更多
男人必须洒脱
7楼-- · 2020-01-31 04:34

I googled and found - NeatUpload


Another solution would be to read the bytes on the client and send it to the server, the server saves the file. Example

Server: in Namespace - Uploader, class - Upload

[WebMethod]
public bool Write(String fileName, Byte[] data)
{
    FileStream  fs = File.Open(fileName, FileMode.Open);
    BinaryWriter bw = new BinaryWriter(fs); 
    bw.Write(data);
    bw.Close();

    return true;
}

Client:

string filename = "C:\..\file.abc";
Uploader.Upload up = new Uploader.Upload();
FileStream  fs = File.Create(fileName); 
BinaryReader br = new BinaryReader(fs);

// Read all the bytes
Byte[] data = br.ReadBytes();
up.Write(filename,data);
查看更多
登录 后发表回答