form ile dosya upload+variable gönderimi nasıl yaparım? - R10.net
  • 29-09-2010, 11:59:11
    #1
    http://yfrog.com/2oclipboard01tvj adresindeki jpg'deki gibi basit bir formum var. içinde resim uploadı da barındırdığı için "ENCTYPE="multipart/form-data"" da var form tagında. ancak bu şekilde "baslik" ve "metin" verilerini kullanamıyorum. resmi istediğim yere upload edecek ve başlık ve metin verileri de sadece ekrana yazdıracak bir "isle.asp" dosyası nasıl olmalıdır?

    not: Passing variables when using enctype multipart/form-data şeklinde google'da yaptığım aramalarda sonuçlar çıkıyor ama çalıştıramıyorum nedense. atladığım biryerler var sanki ama bulamadım.

    (not: bu soruma cevap bulabilirsem elimde bulunan parça parça kodlar ve açıklamalar ile debelenip dosya adı değiştirmeyi de bulabileceğimi düşünüyorum ancak cevap yazarken bir de resim dosyasının adını nasıl herhangi bir şekilde değiştirebileceğimi yazarsanız 3-5 saatlik bir uğraştan kurtarırsınız beni)

    saygılarımla.
    http://www.kitapdefter.com
  • 29-09-2010, 12:23:59
    #2
    Upload kodunuzu burada yayınlarsanız kontrol edebiliriz.
  • 29-09-2010, 12:42:59
    #3
    şu form kodum:
    <form method="POST" enctype="multipart/form-data" action="isle.asp">
        <p>Haber Başlığı: <input type="text" name="baslik" size="43"></p>
        <p>Haber Resmi: <input type="file" name="resim" size="20"></p>
        <p>Haber Metni: <textarea rows="10" name="metin" cols="56"></textarea></p>
        <p><input type="submit" value="Gönder" name="B1"></p>
    </form>

    upload kodum ise;

    request.querystring("baslik")
    request.querystring("metin")

    şeklinde baslik ve metin bilgilerini almaya çalışıyorum. geriye kalanı ise standart aspupload kodları, gelen dosyayı al şuraya koy şeklinde. ama enctype bilgisi olduğu için request.querystring'ler görmezden geliniyor. aspupload kodum ise

    Set Upload = Server.CreateObject("Persits.Upload.1") 
    Upload.Save server.MapPath("resimler")
    For Each File in Upload.Files 
    dosya = file.filename
    Next
    şeklinde. bu şekilde resimler klasörüne gönderilen dosyayı upload edebiliyorum. ama benim derdim, hep kopyalama, hem de metin ve baslik bilgilerini db.ye yazdırmak. tek formla yapamaz mıyım bunu?
    http://www.kitapdefter.com
  • 29-09-2010, 12:45:32
    #4
    Set Upload = Server.CreateObject("Persits.Upload.1")
    Upload.Save server.MapPath("resimler")
    For Each File in Upload.Files
    dosya = file.filename
    Next

    response.write Upload.Form("baslik")
  • 29-09-2010, 13:00:59
    #5
    çok teşekkürler hocam. demek ki request.form'la almak yerine upload.form'la almak gerekiyormuş.

    ben şimdi önceki çalışmalarımdaki parça parça kodlar içinden, aspindir sitesinden ve aspupload ve aspjpeg sayfalarından faydalanarak;

    1. aldığım dosyanın resim olup olmadığına bakacağım
    2. resimse önce kendi belirlediğim bir isim vereceğim. mesela zaman. 2010_09_29_12_56.jpg gibi.
    3. sonra resmi belirlediğim boyutlara getireceğim büyükse de küçükse de.

    yalnız bunlar benim için biraz uzun sürecek. sizin için eminim birkaç dakikalık iştir. bunları da upload kodu içinde yazarsanız benim için çok memnun olurum, büyük bir yükten kurtarırsınız beni.

    çok teşekkürler.
    http://www.kitapdefter.com
  • 29-09-2010, 13:13:10
    #6
    bak bak bak uyanığa bak vermiyecem kodları sen araştırıp bulup yapıcaksın : )))
  • 29-09-2010, 13:30:04
    #7
    hocam canın sağolsun araştırıyorum an itibariyle hala da parça parça olması hoş değil, toparlamak zor oluyor. konuyu izleyen arkadaşlar için yardımı dokunur diye yazıyorum:

    http://support.persits.com/show.asp?code=PS02041192 sayfasında isim nasıl değiştirilir, iki farklı şekilde anlatılmış, uygulamaya çalışıyorum.

    boyutlandırmayı ise
    Jpeg.OriginalHeight
    Jpeg.OriginalWidth

    ile yaptığım kodlarım var. bunları kendi kodumun içine sokmaya da çalışacağım isim değiştirmeyi becerdikten sonra.

    devamında ise

        For Each File in Upload.Files
        If FILE.EXT<>".jpg" then
        If FILE.EXT<>".jpeg" then
        If FILE.EXT<>".png" then
        If File.ImageType="UNKNOWN" Then
        Response.Write "Lütfen JPG veya PNG formatında resim yükleyiniz."
        Response.End
        End If
        End if
        End if
        End if
        Next
    şeklinde uzantıya bakan işlemi de ekleyeceğim. ama işi bilen bi arkadaştan hepsini birden almak daha stabil olurdu.

    tekrar teşekkürler.
    http://www.kitapdefter.com
  • 29-09-2010, 13:43:34
    #8
    ' transfer ettiğimiz dosyayı isimlendirirken dosya adına günün tarihini iliştirmesi için aşama oluşturuyoruz...
    ' dosyayı transfer ettikten sonra bu verileri kullanacağız. cpr1 : tarih, cpr2 : ay, cpr3 : gün
    
    cpr1=Year(date)				' tarih için Yılı öğrendik
    
    if month(date) < 10 then	' eğer ay 10 rakamından küçükse başına 0 ekledik
    cpr2 = "0" & month(date)
    else
    cpr2 = month(date)			' değilse ayı olduğu gibi aldık 
    end if
    
    if Day(date) < 10 then		' eğer gün 10 rakamından küçükse başına 0 ekledik
    cpr3 = "0" & Day(date)
    else
    cpr3 = Day(date)			' değilse günü olduğu gibi aldık
    end if
    
    ' tarih oluşturma bölümü bitti
    
    
    Randomize
    Numara = INT (RND*9999999999)+1 ' Rastgele otomatik sayılar ürettiriyoz.
    
    Server.ScriptTimeout=1000  
    Set Upload = Server.CreateObject("Persits.Upload.1")  
    Upload.OverwriteFiles = False  
    DosyaKontrol = Upload.SaveToMemory  
    
    If DosyaKontrol = 0 Then 
       Response.Write "Lütfen yüklemek üzere bir dosya seçiniz..."
       Response.End 
    End If
    
    For Each File in Upload.Files
    If FILE.EXT<>".rar" then 'bu tip dosyalara müsaade veriyoruz
    If FILE.EXT<>".zip" then
    If FILE.EXT<>".doc" then
    If FILE.EXT<>".xls" then
    If FILE.EXT<>".pdf" then
    If FILE.EXT<>".flv" then
    If File.ImageType="UNKNOWN" Then  'biraz önce müsaade verdiklerimizin dışında bütün resim formatlarını kabul ediyoruz.
    Response.Write "Yüklemek istediğiniz dosya türüne müsaade verilmemiş / yasaklanmış..."   
    Response.End  
    End If
    End if
    End if
    End if
    End if
    End if
    End if
    Next
    
    
    Set dosya = Upload.Files ("dosya")'<input class="form" type="file" name="dosya" size="35"> buradaki name="dosya" ismi ne ise Upload.Files ("") içine yazıyoruz.
    dosyaadi = cpr1&cpr2&cpr3&"_"&Numara&Right(dosya.FileName,4)
    Path = Server.MapPath(dosyanuyeri/" & dosyaadi) 
    dosya.SaveAs Path
    
    Set Jpeg = Server.CreateObject("Persits.Jpeg" )
    Jpeg.Open Path
    Jpeg.Width = 600
    jpeg.Height = Jpeg.OriginalHeight * Jpeg.Width / Jpeg.OriginalWidth
    Jpeg.Canvas.Brush.Solid = False
    Path2 = Server.MapPath(dosyayeri/" & dosyaadi)
    Jpeg.Save Path2
  • 29-09-2010, 15:21:29
    #9
    teşekkürler. kodda bazı problemler mevcut, ben kendimde çözdüm ancak başlarda bir dosyayeri değişkeniyle klasör belirtilmesi gerekiyor. bi de altlarda dosyanuyeri olan yer dosyayeri olarak düzeltilecek. onun dışında işime çok yaradı upload.form("formadi") şeklindeki olayla birlikte.

    cpr1...4'lü ve NUMARA değişkenli sistem yerine ise yılaygüngünadisaatdakikasaniye şeklinde bir dosya ismi kullanıyorum, istenirse başına dosyanın kendi adı da eklenebilir. konuyu izleyen arkadaşlar için ekliyorum onu da aşağı. tekrar teşekkürler arkadaşlar.




    yil = year(now) : ay = month(now) : gun = day(now) : gunadi = weekday(weekday(date)) : saat = Hour(Now) : dakika = Minute(Now) : saniye = Second(Now) 
    if ay < 10 then : ay1 = 0 & ay : else : ay1 = ay : end if
    if gun < 10 then : gun1 = 0 & gun : else : gun1 = gun : end if
    if saat < 10 then : saat1 = 0 & saat : else : saat1 = saat : end if
    if dakika < 10 then : dakika1 = 0 & dakika : else : dakika1 = dakika : end if
    if saniye < 10 then : saniye1 = 0 & saniye : else : saniye1 = saniye : end if
    zaman = yil&ay1&gun1&gunadi&saat1&dakika1&saniye1
    
    dosyaadi = zaman&".jpg"
    
    'zaten aspjpeg kullanarak jpege çevirdiğim için böyle kullandım.
    'dosyanın kendi uzantısını kullanmak isteyen arkadaşlar
    'dosyaadi = zaman&file.ext kullanabilirler.
    http://www.kitapdefter.com