我想知道是否有任何方法可以寫入來自HTML5/JS的文件?在大巴...我可以使用HTML5/JS編寫文件嗎?
回答
是的,使用新的FileWriter API。
http://www.w3.org/TR/file-writer-api/
你可以看到當前瀏覽器的支持位置:http://caniuse.com/#feat=filesystem
在那個鏈接上寫道,Firefox和Chrome支持文件界面,但他們不支持`FileWriter`,據我所見 – danza 2013-04-13 14:51:18
據我所知,你不能寫入到從HTML5文件,因爲給用戶的文件,網頁訪問將成爲安全風險。
如果您只需要存儲一些數據以便您的頁面稍後可以訪問它,那麼HTML5確實有一些稱爲Web Storage的功能,可以實現這一點。
或者您可以將數據存儲在Cookie(如果它非常小)或服務器上。
是的,它可以讀取&使用HTML5 + JS寫入文件。
鏈接,讓你開始 - Exploring FileSystem API
我也寫了一篇文章而回用於SpeckyBoy上,你可能會發現有用的同一主題 - http://speckyboy.com/2012/10/30/getting-to-grips-with-the-html5-file-api-2/
假設你的最終目標是讓用戶保存您的文件可以找到它的位置,就像右鍵單擊鏈接並選擇「另存爲...」時那樣,這些API的瀏覽器覆蓋範圍並不廣泛,這可能是出於安全考慮。
然而,您可以做什麼 - 不管是否使用API,都可以通過指向data:
uri的屬性指定您的建議文件名進行cheesing。例如:
<a id="save" download="earth.txt" href="data:text/plain,mostly harmless ">Save</a>
點擊時,至少在Chrome中,這將保存包含文本mostly harmless
爲earth.txt
文件(和換行符)在你的下載目錄。要設置從JavaScript文件的內容,而不是先調用這個函數:
function setSaveFile(contents, file_name, mime_type) {
var a = document.getElementById('save');
mime_type = mime_type || 'application/octet-stream'; // text/html, image/png, et c
if (file_name) a.setAttribute('download', file_name);
a.href = 'data:'+ mime_type +';base64,'+ btoa(contents || '');
}
另一種可能性是考慮建立類似在Windows平臺上一個ClickOnce應用程序。這將提供一個可下載的可執行文件的鏈接,該可執行文件將在用戶的操作系統中運行,但可以使基於Web的回調能夠發送和檢索數據。 ClickOnce應用程序可以嵌入瀏覽器控件,因此您將擁有一個兼容Web的應用程序,可以直接與用戶的存儲進行對話。
的這個問題的答案取決於你的回答以下問題:
- 你罰款,對這種能力支持的事實目前只存在於基於鉻的瀏覽器(Chrome的&歌劇)?
- 您是否利用現在的專有API來利用這種優勢?
- 你可以在將來刪除該API的可能性嗎?
- 在磁盤上用這個API創建的文件縮小到沙箱(文件不能產生任何效果的位置),你還好嗎?
如果你回答「是」以上所有的,那麼,與FileWriter和FileSystem API,您可以使用JavaScript在瀏覽器標籤/窗口的上下文寫入文件。
這裏的API是如何串聯使用做一個簡單的例子:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
隨着BakedGoods *,即建立一個統一的接口,可用於開展公共存儲操作的Javascript庫所有本地(包括文件系統),以及一些非本地的倉儲設施,上面用此來完成:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", type: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
文件系統規範定義的目錄結構是如何出現在磁盤上沒有任何指引。例如,在基於Chromium的瀏覽器中,沙盒具有一個虛擬文件系統(目錄結構不一定以與從瀏覽器內訪問時相同的形式存在於磁盤上),其中創建的目錄和文件與API放置。
因此,儘管您可以使用API將文件寫入系統,但是在沒有API的情況下(沒有FileSystem API)定位文件可能是一件不平凡的事情。
* BakedGoods是不是別人這傢伙就在這裏:)
- 1. 我可以使用PowerShell編寫WebService嗎?
- 2. 我可以使用CodeRush Express編寫插件並使用它嗎?
- 3. 可以使用JavaScript寫入文件嗎?
- 4. 我可以使用C#編寫LXDE面板插件嗎?
- 5. 我可以使用Groovy編寫Eclipse插件嗎?
- 6. 你可以使用.bat文件編寫sql命令嗎?
- 7. 我可以使用.writelines()將單行寫入文件嗎?
- 8. 我們可以使用akka.event.Logging在文件中寫入日誌嗎?
- 9. 我可以使用前綴拼寫文件嗎?
- 10. Lua:我可以使用IO同時寫入兩個文件嗎?
- 11. 我可以使用.jasper文件嗎?
- 12. 我可以只使用PYC文件嗎
- 13. 我可以只使用NOSQL編寫整個應用程序嗎?
- 14. 我可以使用pygtk編寫一個用於Fedora的GUI嗎?
- 15. 我可以使用RealBasic編寫Mac App Store應用程序嗎?
- 16. 我可以使用Zend_Db_Select重寫嗎?
- 17. 我可以使用EPPlus創建或編輯XLTM文件嗎?
- 18. 我可以使用帶分隔文件的Eclipselink Moxy編組嗎?
- 19. 我可以使用OpenXml來編輯XPS文件嗎?
- 20. 我可以使用.fakes文件加快編譯時間嗎?
- 21. 我可以使用.swf文件進行編輯嗎?
- 22. 我可以使用POI從瀏覽器編輯excel文件嗎?
- 23. 我可以使用perl腳本編輯TLV文件嗎?
- 24. 可以用Formatter寫入文件嗎?
- 25. 我可以用Python編寫瀏覽器插件嗎?
- 26. 我可以使用Criteria API編寫此SQL嗎?
- 27. 我可以使用Xcode編寫一個Excel加載項嗎?
- 28. 我們可以使用netbeans編寫Android代碼嗎
- 29. 我們可以使用c#編寫NNTP服務器嗎?
- 30. 我可以使用VS2008編寫.Net 4嗎?
寫文件在本地或遠程維護? – WaiLam 2010-11-30 02:18:00
@WaiLam,本地。我猜如果我想遠程,PHP/ASP可以很容易地做到這一點(取決於服務器配置)? – 2010-11-30 14:54:42