2013-12-07 18 views
6

Bir formu manuel olarak göndermeden PhantomJS kullanarak belirli bir sayfaya yüklemek mümkün mü? Content-Type: multipart/form-data kullanarak bir şeylerin mümkün olduğunu düşünüyorum.PhantomJS - Bir form göndermeden dosya yükleme

https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js'daki örnek çalışıyor, ancak dosyayı doğrudan herhangi bir öğe ile etkileşimde bulunmadan POST isteğine göndermek istiyorum.

Herhangi bir öneri?

xhr2 itibariyle (size

+0

Bunun için herhangi bir çözüm buldunuz mu? – themiurgo

+0

@Ros - orada olası bir cevabın başlangıcına sahip gibiydiniz, lütfen sonucunuzu daha açık bir şekilde belirtmek için yeniden ifade edip edemeyeceğinizi öğrenin. –

cevap

3

Dosya yüklemeleri AJAX üzerinde yapılabilir çok teşekkür ederim - Eğer eski tarayıcıları desteklemek gerekirse, jQuery-File-Upload gibi bir şey kullanır; bu sadece yükleme düşen görevi yapmaya kullanımıyla ilgili a good tutorial here yoktur, ve Blueimp'in UI'sini kullanmamak.) Bu, "formun manuel olarak gönderilmemesi" bölümü ile ilgilidir. Dosyayı seçmek için bir dosya yükleme öğesiyle etkileşime girmeniz gerekecek ve bu, page.uploadFile()'u kullandığınız yerdir.

Sadece JavaScript'ten, "sayfada herhangi bir öğe ile etkileşim kurma" olmadan, özel bir JavaScript çalıştırmak için page.evaluate() öğesini kullanabilirsiniz. Daha sonra dosyayı yerel diskte bulmak için File Reader API kullanabilir, blobunda saklayabilir ve ardından bu bloğu AJAX üzerinden yükleyebilir. PhantomJS'deki WebKit (yaklaşık olarak Chrome 13'e eşdeğerdir), FileReader API'sının Chrome 6'dan beri orada olduğu gibi çalışmalıdır. Tek yapmanız gereken, başsız bir komut dosyası kullanarak bir sunucuya dosya yüklemekse, BTW , PhantomJS overkill, ve curl kullanabilirsiniz. Ama PhantomJS'yi başka bir nedenden dolayı kullanmak istediğinizi farz ediyorum!)

+1

Lütfen aşağı çekerken yorum yapmak için iyi davranışlara sahip olun. (Sadece bu cevabı tekrar okudum ve hala bunun sadece iyi bir cevap olmadığını düşünüyorum, fakat doğru olanı - OP ile aynı problemi yaşadım ve önerilerinden üçünü de çeşitli zamanlarda kullandım. Bu yüzden neden yanlış olduğunu düşündüğünüzü daha çok duymak istiyorum.) –

0

Sonunda kullandığım çözüm, bu durumda NodeJS ve PhantomJS'nin bir karışımıdır. Yüklemem gereken bir şey yüklemem gerekiyor ve NodeJS "request" modülünü kullanarak dosya (lar) 'ı yüklerim ve daha sonra manuel olarak işlenmesi gereken sayfanın çıkışını PhantomJS'e gönderirim.