是否可以使用本机文件浏览器来选择存储在服务器上的文件
Is it possible to use the native filebrowser to pick a file stored on the server?
我有两个用例,第一,用户可以选择一个本地文件并将其上传到服务器。其次,用户可以选择一个已经在服务器上的文件(他们上传的,通过电子邮件发送的等)。我知道有很多库都能做到这一点,但是否有可能使用本机文件浏览器,并允许它们选择存储在服务器上的文件?如果不支持所有浏览器,也没关系。
没有。文件浏览器是由浏览器和操作系统控制的,你不能决定显示哪个文件夹。
不相信<input type="file">
对话框可以引用用户本地文件系统以外的文件系统。
不支持所有浏览器也没关系
一种解决方法是将上传文件的名称或引用保存在数组或对象中,使用requestFileSystem
将实际上传的文件保存在FileSystem
中,向用户提供上传文件列表,当用户从列表中选择文件时,使用requestFileSystem
从FileSystem
中检索File
对象。
查看jQuery文件上传插件:是否可以保留上传文件夹的结构?
或者,正如@Gorka所建议的,您可以将上传的file.name
存储在本地的数组或对象中,其中上传的file
对象存储在服务器相同的文件名;用file.name
作为value
的<option>
元素填充<select>
元素;在select
元素的更改事件中,使用XMLHttpRequest
或fetch
从服务器检索选定的<option>
和value
。例如,
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="file" />
<select disabled>
<option>Choose File from server</option>
</select>
<br>
<label></label>
<br>
<iframe style="width:95vw;height:98vw"></iframe>
<script>
var input = document.querySelector("input[type=file]");
var select = document.querySelector("select");
var iframe = document.querySelector("iframe");
var label = document.querySelector("label");
var uploads = [];
select.onchange = function(e) {
var uploadedFile = uploads.filter(function(file) {
return file.name === e.target.value;
}).pop();
var url = "/uploads/" + uploadedFile.name;
fetch(url)
.then(function(response) {
return response.blob()
})
.then(function(file) {
// do stuff with `file`
var reader = new FileReader();
reader.onloadend = function(e) {
iframe.onload = function() {
label.textContent = url;
}
iframe.src = e.target.result;
}
reader.readAsDataURL(file);
})
}
input.onchange = function(e) {
var file = e.target.files[0];
// save reference to uploaded file name
uploads.push({
name: file.name,
});
// post file to server
var data = new FormData();
data.append("file", file, file.name);
var request = new XMLHttpRequest();
request.open("POST", "/path/to/server");
request.onload = function() {
var option = document.createElement("option");
option.value = file.name;
option.textContent = file.name;
select.appendChild(option);
if (select.disabled) {
select.removeAttribute("disabled");
}
alert(`${file.name} written to server`);
}
// save `file` as `file.name` at server,
// for example, at `/uploads/${file.name}`
request.send(data);
}
</script>
</body>
</html>
plnkr http://plnkr.co/edit/McvuErPOxyNJcpIZXl1G?p=preview
相关文章:
- 将图像文件存储在猫鼬模式中的二进制数据中,并以html形式显示图像
- 在使用java使用dropbox选择器从dropbox中提取文件后,如何将文件存储在服务器中
- 如何使用 jQuery 动态更改视频,其中源路径存储在数据库中,文件存储在文件系统中
- rails_admin的 css 和 javascript 文件存储在哪里
- 如果我的文本文件存储在服务器中,如何在 javascript 中读/写文本文件
- HTML5应用程序缓存文件存储在客户端的位置
- 将 Json 文件存储在 AngularJS 变量中,以便与“ng-repeat”一起使用
- 将角度文件存储在轨道中的最佳位置
- 在Mongoose中使用Multer将文件存储到MongoDB中
- 将文件存储在Firebase存储中
- Glassfish/Java/JS:将图像文件存储到servlet中,并将其检索到网页中
- Webaudio API:将数组缓冲区作为文件存储在服务器上,稍后检索
- 将值从文本文件存储到数组中
- Nodejs:在一个新窗口中写入zip文件(存储在一个变量中作为Buffer)
- 如何使用 JavaScript 将 JSON 数据从远程 URL 读取到本地文件存储中的文件
- 哪个更省时?文件存储或SQLite
- 将javascript数组作为csv文件存储在服务器上
- 在数据库中插入clob数据或所有类型的文件存储
- HTML5 - Web SQL数据库文件存储和所有表创建的地方
- 打开一个javascript对话框,将完整的文件存储到一个var中