none
File upload ile büyük boyutlu dosyaları kayıt yapma sorunu çözüldü RRS feed

  • Soru

  • arkadaşlar. ben kullanıcının file upload ile seçtiği dosyayı arkaplanda yine onun bilgisayarında mesala C:\\temp\\ klasörünün altına atmak ordadan da ftp webrequest ile sunucuya yüklemek istiyorum. bunu nasıl yapabilirim bilgisi olan arkadaşlar yardımcı olursanız çok sevinirim.

     protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                FileUpload1.SaveAs("C:\\Windows\\temp\\" + FileUpload1.FileName);
                
            }
             
            catch (Exception ex)
            {
                Response.Write(ex.Message);
             }
            
        }

    kayıt için bu kodu kullanıyorum localde çalışırken kaydediyor ama internet üzerinden çalışmıyor.



    • Düzenleyen Adem Kaya 10 Ocak 2013 Perşembe 11:22
    24 Aralık 2012 Pazartesi 23:01

Yanıtlar

  • web configdeki <httpRuntime kodunuzu aşağıdaki ile değiştirip deneyin birde,

    <httpRuntime  maxRequestLength="20240000" executionTimeout="360" requestLengthDiskThreshold="8192" useFullyQualifiedRedirectUrl="true" minFreeThreads="16" minLocalRequestFreeThreads="8" appRequestQueueLimit="50000" enableKernelOutputCache="true"
     enableVersionHeader="true" requireRootedSaveAsPath="true" enable="true" shutdownTimeout="90" delayNotificationTimeout="5" waitChangeNotification="0" maxWaitChangeNotification="0" enableHeaderChecking="true" sendCacheControlHeader="true" apartmentThreading="false"/>

    25 Aralık 2012 Salı 12:37
  • sanırım sorunla ilgili bir tesbitim var. sorun şu ki dosya boyutu değil sayfa dosya yüklenirken sürekli bağlanıyor diyor. ancak 5 dk. dan fazla süren upload larda yüklemeyide kapatıyor serverle bağlantıyı da kesiyor. bu yüzden sanırım sayfayı postback yapmadan yükleme yapacak bir yol bulmalıyım.
    26 Aralık 2012 Çarşamba 11:31

Tüm Yanıtlar

  • Dosya zaten client makinesinde! bir daha neden kaydetmek istiyorsunuz?!!!?!?!?

    Ayrıca sunucuda çalışan bir kodun clientteki bir dosyayı kopyalamasını beklemek yanlış olur. Bu işi yapacak kodu yada uygulamayı clientte çalıştırmalısınız. Bu da Silverlight yada Air vs. ile olur.


    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    25 Aralık 2012 Salı 07:48
    Moderatör
  •  localde çalışırken kaydediyor ama internet üzerinden çalışmıyor.

    Aslında local'de de çalışmıyor. Şöyle-ki aslında yazdığınız kod sunucu bilgisayar üzerinde işlem yapıyor. Siz kendi bilgisayarınızda test yaptığınızda istemci de sunucu da aynı makine olduğundan "çalışıyormuş"  gibi gözüküyor. Asp.net kodlarınız sunucu bilgisayar üzerinde çalışır. İstemci makineye sadece çalışma işleminin ardından oluşan sonucu iletir.
    25 Aralık 2012 Salı 07:59
    Moderatör
  • aslında benımde bu konuda sıkıntım var port acıp ftp ye masa ustunden dosya yuklemek ıstıyorum yardımcı olursanız sevırım

    25 Aralık 2012 Salı 08:47
  • bunu isteme nedenim aslına clientdaki dosyanın fiziksel adresini elde etmek için. yani ftp upload kodlarında yüklenecek dosyanın clientdaki fiziksel adresini istiyor bunu da browserlar vermiyor sadece dosya adını veriyor. Bu yüzden ftp upload yaparken dosya bulunamadı hatası veriyor. bende cliente sabit bir adrese kopyalayabilrsem en azından fiziksel adresi bilirim diye düşünmüştüm.

    Benim asıl yapmak istediğim şey fileupload gibi bir araçla büyük boyutlu bir dosyayı -video dosyasını mesela- seçip sunucuda belirlediğim bir klasöre yüklemek. Çünkü host firması web üzerinden yüklemelerde 2 mb. sınırı var. bu yüzden ftp ile yapmam gerektiği söylendi. Aylardır çözemedim bu sorunu arkadaşlar bilen yapan varsa lütfen yardımcı olur musunuz. kafayı yiyecem

    25 Aralık 2012 Salı 08:58
  • Sen zaten 

    FileUpload1.SaveAs(Server.MapPath("videos") +"/"+ FileUpload1.FileName); 

    şeklinde bir kod yazdığında fileuploaddan seçmiş olduğun videoyu video klasörüne kopyalamış olursun, bunun boyutunun bir sınırlaması olacağını zannetmiyorum mantıken zaten ftp ile yapmış oluyorsun, sen sadece bu kodu yaz videoyu kaydetmek istediğin sayfada,

    sayfanı yayınla hostunda,   bu kodu yazdığın sayfanın bulunduğu yerde birde video klasörün olsun, yayınladıktan sonra pleskden video klasörüne de yazma izni ver bundan sonrası için artık daha ekstra bir işleme ihtiyacın kalmayacaktır.

    Hatta FileUpload ile ne seçersen seç videos klasörüne dosyanın kendi adıyla kaydedecektir.

    Burda sınırlaması olabilecek tek şey böyle büyük dosyaları kaydetme, görüntülenme vs. gibi işlemlerde hostunun trafiği ve alanı olabilir

    25 Aralık 2012 Salı 09:05
  • çok haklısınız bende bir sıkıntı olmayacağını düşünüyordum ama büyük boyutlu dosyalarda sorun çıkınca host firmasına sordum. bu yanıtı aldım.

    Acaba sorun işlem süreleri ile mi alakalı. Yada login olma süresiyle mi alakalı. Peki mesela 1gb lık bir dosyayı yüklemek için

        <httpRuntime requestValidationMode="2.0" executionTimeout="2000" maxRequestLength="2000000" appRequestQueueLimit="50000" requireRootedSaveAsPath="true" shutdownTimeout="1800"/> burdaki

    ve

          <forms name=".ASPXAUTH" loginUrl="Account/login.aspx" protection="All" timeout="266668800" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseCookies" enableCrossAppRedirects="false"/>

    budaki süreleri mi ayarlamalıyım başka ayar varmı.

    25 Aralık 2012 Salı 09:40
  • Şu anki kodlarınla dediğim gibi yaptığın takdirde, klasörüne de pleskden yazma izni verirsen büyük boyutlu dosyayı (örn 1gb) biraz uzun sürede yükler ama yükler sorun olmaz
    25 Aralık 2012 Salı 09:54
  • tamam deneyeceğim çok teşekür ederim herkese
    25 Aralık 2012 Salı 10:42
  • dediğiniz her şeyi yaptım 140 mblık bir dosya denedim ama sorun çıktı

    bir süre yükledikten sonra

    Bağlantı sıfırlandı
              Sayfa yüklenirken sunucuyla bağlantı kesildi. hatası verdi

    işte kodlarım

    <%@ Page Title="" Language="C#" MasterPageFile="~/asil.master" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
        <script type="text/javascript">
    
    
          function ShowProgress() {
              document.getElementById('<% Response.Write(UpdateProgress1.ClientID); %>').style.display = "inline";
          }
        
    
        </script>
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
        <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
          <ProgressTemplate>
                <asp:Image ID="Image1" runat="server" ImageUrl="~/images/indicator.gif" 
                    Height="24px" Width="24px" /><asp:Label ID="Label1" runat="server" Text=" İşlem Yapılıyor..."></asp:Label>
            </ProgressTemplate>
        </asp:UpdateProgress>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        <asp:FileUpload ID="FileUpload1" runat="server" />
    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" OnClientClick="ShowProgress()"  Text="Button" />
        </ContentTemplate>
            <Triggers>
                <asp:PostBackTrigger ControlID="Button1" />
            </Triggers>
        </asp:UpdatePanel>
    
    </asp:Content>
    
    


    bu da kodbehind

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                FileUpload1.SaveAs(Server.MapPath("dosyalar/") + FileUpload1.FileName);
                
            }
             
            catch (Exception ex)
            {
                Response.Write(ex.Message);
             }
            
        }
    }

    bu da web config

    <configuration>
    <system.web>
        <customErrors mode="Off" defaultRedirect="hata.aspx">
          <error statusCode="403" redirect="engellendi.aspx"/>
          <error statusCode="404" redirect="bulunamadi.aspx"/>
        </customErrors>
        <compilation debug="false" targetFramework="4.0">
          <assemblies>
            <add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
            <add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
          </assemblies>
        </compilation>
        <authentication mode="Forms">
          <forms name=".ASPXAUTH" loginUrl="Account/login.aspx" protection="All" timeout="266668800" path="/" requireSSL="false" slidingExpiration="true" defaultUrl="Default.aspx" cookieless="UseCookies" enableCrossAppRedirects="false"/>
        </authentication>
        <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">
          <providers>
            <clear/>
            <add name="SqlProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="profiller" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="10" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
          </providers>
        </membership>
        <profile>
          <providers>
            <clear/>
            <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="profiller" applicationName="/"/>
          </providers>
        </profile>
        <roleManager enabled="true" cacheRolesInCookie="true" defaultProvider="AspNetSqlRoleProvider" cookieName=".ASPXROLES" cookiePath="/" cookieTimeout="40000" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All">
          <providers>
            <clear/>
            <add connectionStringName="profiller" applicationName="/" name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider"/>
            <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider"/>
          </providers>
        </roleManager>
        <webParts>
          <personalization defaultProvider="webpartprovider">
            <providers>
              <add name="webpartprovider" type="System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider" connectionStringName="profiller" applicationName="/"/>
            </providers>
          </personalization>
        </webParts>
        <caching>
          <sqlCacheDependency enabled="true" pollTime="500">
            <databases>
              <add name="isim" connectionStringName="sqlveritabani"/>
            </databases>
          </sqlCacheDependency>
        </caching>
        <httpModules/>
        <httpRuntime requestValidationMode="2.0" executionTimeout="20000" maxRequestLength="2000000" appRequestQueueLimit="50000" requireRootedSaveAsPath="true" shutdownTimeout="180000"/>
      </system.web>
      
    </configuration>

    nerde yanlış yapıyorum

                                                  
    25 Aralık 2012 Salı 12:06
  • web configdeki <httpRuntime kodunuzu aşağıdaki ile değiştirip deneyin birde,

    <httpRuntime  maxRequestLength="20240000" executionTimeout="360" requestLengthDiskThreshold="8192" useFullyQualifiedRedirectUrl="true" minFreeThreads="16" minLocalRequestFreeThreads="8" appRequestQueueLimit="50000" enableKernelOutputCache="true"
     enableVersionHeader="true" requireRootedSaveAsPath="true" enable="true" shutdownTimeout="90" delayNotificationTimeout="5" waitChangeNotification="0" maxWaitChangeNotification="0" enableHeaderChecking="true" sendCacheControlHeader="true" apartmentThreading="false"/>

    25 Aralık 2012 Salı 12:37
  • Malesef dediğiniz şekilde yaptım ama olmadı.

    20 mb lık bir dosyayı yüklüyor. ama 140 mblık bir dosyayı denedim browser hata verdi

    Bağlantı sıfırlandı
     Sayfa yüklenirken sunucuyla bağlantı kesildi.
    Site geçici olarak açılamıyor ya da çok meşgul olabilir.
    Biraz bekleyip yeniden deneyin.
    Hiçbir sayfayı açmayı başaramıyorsanız bilgisayarınızın ağ bağlantılarını
    gözden geçirin ve internete bağlı olduğunuzdan emin olun.
    Bilgisayarınız ya da ağınız güvenlik duvarı ya da vekil sunucu tarafından
    korunuyorsa, Firefox uygulamasına internete erişmek için gerekli izinlerin verilmiş olduğundan emin olun.

    25 Aralık 2012 Salı 12:57
  • vermiş olduğum kod ile 150 mb lık video dosyasını convert edip yükleyebiliyorum ben, 

    1 - ) Farklı bir tarayıcıda deneyin

    2 - ) executionTimeout   değerini arttırarak deneyin

    25 Aralık 2012 Salı 13:02
  • İE, Opera Chrome ve Firefox da denedim. Birde executionTimeout u 10800 yaptım sonuç aynı en fazla opera dayandı oda en sonunda sunucu bağlantısı kesildi hatası verdi.
    • Düzenleyen Adem Kaya 25 Aralık 2012 Salı 14:01
    25 Aralık 2012 Salı 13:59
  • sanırım sorunla ilgili bir tesbitim var. sorun şu ki dosya boyutu değil sayfa dosya yüklenirken sürekli bağlanıyor diyor. ancak 5 dk. dan fazla süren upload larda yüklemeyide kapatıyor serverle bağlantıyı da kesiyor. bu yüzden sanırım sayfayı postback yapmadan yükleme yapacak bir yol bulmalıyım.
    26 Aralık 2012 Çarşamba 11:31
  • arkadaşlar sorunu çözdüm burdada paylaşmak istedim

    Önay beyin tavsiyesi üzerinde silverlight ile file upload işini araştırdım. nette SilverlightFileUploadSrc diye bir uygulama buldum. onu kendi projeme entegre ettim sorunsuz çalışıyor.

    istediğim kadar büyük dosyayı yükleyebiliyorum.

    10 Ocak 2013 Perşembe 11:20
  • Silverlight ı projenize nasıl entegre ettiniz bende de aynı problem var
    4 Kasım 2013 Pazartesi 21:21
  • Bizde de aynı problem var. silverlight projesini asp.net altında nasıl kullandınız acaba. paylaşırsanız seviniriz
    6 Kasım 2013 Çarşamba 16:15