2013-12-07 79 views
6

是否可以使用PhantomJS將文件上傳到某個頁面而無需手動提交表單?我認爲可以使用Content-Type:multipart/form-data。PhantomJS - 無需提交表單即可上傳文件

https://github.com/ariya/phantomjs/blob/master/examples/imagebin.js上的示例工作正常,但我希望直接發送POST請求中的文件而不與任何元素進行交互。

有什麼建議嗎?

非常感謝您

+0

您是否找到任何解決方法? – themiurgo

+0

@Ros - 你似乎有一個可能的答案在那裏開始,請看看你是否可以改寫它來更清楚地陳述你的結論。 –

回答

3

文件上傳可以通過AJAX來完成(如XHR2的 - 如果你需要支持舊的瀏覽器,使用類似jQuery-File-Upload;有a good tutorial here使用它只是做上裝部分,而不是使用Blueimp的用戶界面。)這與「無需手動提交表單」部分的問題有關。您仍然需要與文件上傳元素進行交互以選擇文件,這就是您使用​​的地方。

要完全使用JavaScript,不使用「與頁面上的任何元素進行交互」,您可以使用page.evaluate()來運行一些自定義JavaScript。然後它可以使用File Reader API在本地磁盤上查找文件,將其存儲在一個blob中,然後通過AJAX將該blob上傳。 PhantomJS中的WebKit(大致相當於Chrome 13)應該可以正常工作,因爲顯然從Chrome 6開始FileReader API就已經存在了。

(順便說一下,如果您只想使用無頭腳本將文件上傳到服務器,PhantomJS是矯枉過正的,你可以使用curl但我假設你想使用PhantomJS的其他原因!)

+1

請在投票時留下好評。 (我剛剛重讀了這個答案,我仍然認爲這不僅是一個好的答案,而且是正確的答案 - 我和OP有同樣的問題,並且在不同的時間使用了我的三條建議。所以我很想知道更多關於你爲什麼認爲它是錯的。) –

0

我最終使用的解決方案是NodeJS和PhantomJS的混合,以防萬一我需要上傳一個分支進程並使用NodeJS「請求」模塊上傳文件,然後將需要手動處理的頁面輸出發送回PhantomJS。