2016-08-03 94 views
2
URL.createObjectURL(event.target.files[0] this makes me able to view the image just uploaded in the browser. Using the same hack is there a way, where I can store the file/image into a folder instead of URL? 

console.debug(URL.createObjectURL(event.target.files[0])); 

上述註銷,這樣的:blob:http%3A//mysite.localhost.com/f96c26b4-9938-4f6e-941e-edbdae3454c9是否可以使用createObjectURL保存到文件夾中?

我只是想知道如果我可以用文件夾路徑替換mysite.localhost.com。我甚至嘗試用一個文件夾的完整路徑替換URL,但createObjectURL只適用於URL。有沒有任何功能可以將文件保存到文件夾中?

+0

沒有,用'URL.createObjectURL'is僅適用於當前會話,在瀏覽器的內存中創建對象的URL。你想保存的是Blob傳遞給這個方法。保存到用戶的機器文件夾將是一個巨大的安全流程。你可以做的是使用類似FileSaver.js的東西,它會顯示一個提示,請求你的用戶保存文件,或者如果你打算在服務器端保存,那麼是的,有辦法;-) – Kaiido

+0

@Kaiido,我看到我努力通過jquery保存到文件夾:( – 112233

+0

Kaiido,我想保存在服務器端...請問是什麼方式,請使用$(':form')。submit()並傳遞數據像這樣:$(this).serialize()。在php腳本中,我只獲得其他輸入值,但沒有文件輸入。 – 112233

回答

3

每您的評論

我想保存在服務器端..

的答案爲 「是這是可能的」。

首先,讓我們解釋一下你的誤解:

該方法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); 
} 
+0

非常感謝..它的作品..和美妙的解釋...有美好的一天! – 112233

+0

謝謝先生..但我可以虛心地請求一個asp的等效服務器端代碼,如果使用FormData()'? –

+0

@ Malky.Kid我絕對不知道ASP的一切......但不是[this Q/A](https://stackoverflow.com/questions/28369529/how-to-setup-a-webapi-controller-for-multipart-form-data)你在做什麼? – Kaiido

相關問題