Magic Wonder Ответов: 1

Загрузите файл размером 1 ГБ с веб-страницы в ASP.NET


Всем Привет,

Мне нужно разработать веб-страницу, на которую пользователь будет загружать большие файлы, скажем, от 600 МБ до 2 ГБ.

Кроме того, дайте мне знать, какие факторы, такие как пропускная способность и т.д., могут повлиять на скорость загрузки файлов.

Что я уже пробовал:

В настоящее время я использую обычный контроль загрузки файлов для небольших файлов.

Я проверил с помощью этого фрагмента кода

Глаг.Aspx-файл

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="VB.aspx.vb" Inherits="VB" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <style type="text/css">
        body
        {
            font-family: Arial;
            font-size: 10pt;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    Select File :- <input type="file" name="postedFile" />
    <input type="button" id="btnUpload" value="Upload" />
        <br />
        <br />
    <progress id="fileProgress" style="display: none"></progress>
    <hr />
    <span id="lblMessage" style="color: Green"></span>
          <script type="text/javascript" src="jquery.min-1.8.3.js"></script>
    <script type="text/javascript">
        $("body").on("click", "#btnUpload", function () {
            $.ajax({
                url: 'HandlerVB.ashx',
                type: 'POST',
                data: new FormData($('form')[0]),
                cache: false,
                contentType: false,
                processData: false,
                success: function (file) {
                    $("#fileProgress").hide();
                    $("#lblMessage").html("" + file.name + " has been uploaded.");
                },
                xhr: function () {
                    var fileXhr = $.ajaxSettings.xhr();
                    if (fileXhr.upload) {
                        $("progress").show();
                        fileXhr.upload.addEventListener("progress", function (e) {
                            if (e.lengthComputable) {
                                $("#fileProgress").attr({
                                    value: e.loaded,
                                    max: e.total
                                });
                            }
                        }, false);
                    }
                    return fileXhr;
                }
            });
        });
    </script>
    </form>
</body>
</html>


С ниже обработчик

HandlerVB.данного

<%@ WebHandler Language="VB" Class="HandlerVB" %>

Imports System
Imports System.IO
Imports System.Net
Imports System.Web
Imports System.Web.Script.Serialization

Public Class HandlerVB : Implements IHttpHandler
    
    Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
        'Check if Request is to Upload the File.
        If context.Request.Files.Count > 0 Then
            
            'Fetch the Uploaded File.
             Dim postedFile As HttpPostedFile = context.Request.Files(0)
            
            'Set the Folder Path.
            'Dim folderPath As String = context.Server.MapPath("~/Uploads/")
           
            'Set the File Name.
            Dim fileName As String = Path.GetFileName(postedFile.FileName)
            
            'Save the File in Folder.
            postedFile.SaveAs(folderPath + fileName)
            
            'Send File details in a JSON Response.
            Dim json As String = New JavaScriptSerializer().Serialize(New With {
                .name = fileName
            })
            context.Response.StatusCode = CInt(HttpStatusCode.OK)
            context.Response.ContentType = "text/json"
            context.Response.Write(json)
            context.Response.End()
        End If
    End Sub
 
    Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
        Get
            Return False
        End Get
    End Property

End Class



Когда я загружаю файл размером 100 МБ в свою сеть, загрузка занимает 4 минуты, а загрузка из внешней сети-примерно 7 минут. Однако всякий раз, когда загружается файл размером 600 Мб или более, он не загружается.

Веб.конфиг

<configuration>

    <system.web>
      <httpRuntime maxRequestLength="2147483647" executionTimeout="3600" enableVersionHeader="false" />	
      <compilation debug="true" targetFramework="4.0" />
    </system.web>

 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="2147483647" />
      </requestFiltering>
   </security>
 </system.webServer>
</configuration>


пожалуйста, помогите, как решить эту проблему или любым другим способом ее достичь.

OriginalGriff

И что же?
В чем же проблема?
А что вы пробовали?
Где ты застрял?
Какая помощь вам нужна?

Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.

Magic Wonder

Сделано. Пожалуйста предложите

1 Ответов

Рейтинг:
2

OriginalGriff

Во первых, maxRequestLength находится в КБ, а не в байтах: и поскольку это целое число, есть хороший шанс, что оно переполнится.
Вам, вероятно, нужно пересмотреть maxAllowedContentLength а также - на этот раз в байтах.

Попробуй

<httpRuntime maxRequestLength="2147483" executionTimeout="3600" enableVersionHeader="false" />
И
<security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="2147483647" />
    </requestFiltering>
</security>

Возможно, вам придется проконсультироваться с вашей службой подъема, чтобы убедиться, что у них нет никаких ограничений, которые переопределяют эти настройки - некоторые из более дешевых так и делают.
Наверное, здесь тоже стоит посмотреть: Джон Галлоуэй - большие загрузки файлов в ASP.NET[^]