我在使用服務器端的java + spring和extdirectspring的應用程序中工作。在客戶端它使用extjs/javascript。在JavaScript中,你如何從服務器打開文件?
我想戳一個在服務器端的方法,並從數據庫中檢索一個文件。如果該文件不存在,那麼我想以某種方式顯示錯誤。
嘗試檢索文件並檢查它是否存在需要在同一個調用中發生 - 文件可以在調用之間刪除。
我可以看到人們在當前應用程序中完成的方式是使用spring controllers +請求映射和window.open("someUrl/filename.blah");
,服務器從映射方法返回文件。
這似乎並沒有讓你處理文件不存在的情況。
理想情況下,我只想從服務器發送一些json文件數據(可能爲null)和成功/失敗。當我收到迴應時,我可以顯示關於失敗的一些信息或打開文件。不幸的是我無法觀察當前的失敗模式,因爲某處某處正在緩存文件 - 如果我從數據庫中刪除它們,它們似乎仍然存在,您仍然可以下載它們!
'打開'我的意思是顯示標準'你想用這個文件打開/保存'對話框。我沒有試圖解析文件或者做任何事情 - 我只是想爲瀏覽器/用戶提供服務。
有沒有辦法做到這一點,而不使用URL和window.open?例如一些採用blob數據和文件名或類似的方法?
更新
數據/ JSON的轉移並不是我試圖解決這個問題。
由於我使用extdirect我可能就做這樣的:
public class SomeClass
{
@ExtDirectMethod
public AFile getFile(Long id) throws Exception
{
//do stuff
}
}
然後在客戶方你只是做:
someClass.getFile(id, function(file){
if(file.found){
SomeHowGiveThisToTheUser(file.name,file.data); ????
return;
}
ReportCouldntFind(file.name);
});
我不知道該怎麼辦的位是將該文件提供給用戶。
進一步更新
我不認爲這是可能做到這一點無Blob網址或數據的URI。這兩個都在this post中提到過。我還沒有嘗試過,因爲我們不得不支持兩種技術都太舊的瀏覽器。
我相信你會找到解決方案,如果你想Google如何從服務器獲取數據而不加載頁面,但你需要做的是XHR請求。對這個術語進行搜索,你會發現綽綽有餘的信息。 –
搜索的另一個術語是AJAX,它只是上述的替代名稱。我看到你在客戶端上使用ExtJS,並且我很確定他們有一個API來幫助完成這個任務。 –
@cookiemonster我可能沒有說清楚 - 問題是沒有從服務器檢索數據,它讓瀏覽器保存/打開文件,如果它沒有直接從url中檢索 –