每您的評論
我想保存在服務器端..
的答案爲 「是這是可能的」。
首先,讓我們解釋一下你的誤解:
該方法URL.createObjectURL()
返回的字符串是一個URI指向在瀏覽器的內存有些地方,那裏的斑點通過作爲第一個參數將作爲一個文件進行訪問。
該文件不能通過此URI訪問,並且此URI僅適用於當前會話。您不能共享它,也不能從其他機器訪問它,甚至不能使用其他瀏覽器從同一臺機器訪問它。當調用它的文檔將被關閉時(在某些實現中,它需要硬刷新),它將被刪除。
但是你需要的實際上是保存你通過的Blob。
這可以通過FormData
對象很容易地實現,它將允許您通過XHR請求發送它。
input.onchange = function() {
var formData = new FormData();
formData.append('file', this.files[0], 'yourFileName.ext');
var xhr = new XMLHttpRequest();
xhr.onload = callback; // assuming you've got a callback function
xhr.open('POST', yourServerSideFileHandlerScript);
xhr.send(formData);
};
或使用jQuery,
$(input).on('change', function() {
var formData = new FormData();
formData.append('file', this.files[0], 'yourFileName.ext');
$.ajax({
url: yourServerSideFileHandlerScript,
data: formData,
processData: false,
contentType: false,
type: 'POST',
success: callback
});
});
然後你就可以得到它的服務器端的任何文件上傳。
例服務器端代碼(這裏PHP):
if (isset($_FILES["file"])){
$dir = 'some/dir/';
$blob = file_get_contents($_FILES["file"]['tmp_name']);
file_put_contents($dir.$_FILES["file"]["name"], $blob);
}
沒有,用'URL.createObjectURL'is僅適用於當前會話,在瀏覽器的內存中創建對象的URL。你想保存的是Blob傳遞給這個方法。保存到用戶的機器文件夾將是一個巨大的安全流程。你可以做的是使用類似FileSaver.js的東西,它會顯示一個提示,請求你的用戶保存文件,或者如果你打算在服務器端保存,那麼是的,有辦法;-) – Kaiido
@Kaiido,我看到我努力通過jquery保存到文件夾:( – 112233
Kaiido,我想保存在服務器端...請問是什麼方式,請使用$(':form')。submit()並傳遞數據像這樣:$(this).serialize()。在php腳本中,我只獲得其他輸入值,但沒有文件輸入。 – 112233