我没有看到任何这样做的例子.这是API规范中不允许的吗?
我正在寻找一个简单的拖放解决方案,用于上传整个文件夹树的照片.
我需要一种简单的方法来允许用户一次上传多个文件(即我需要允许用户上传文件夹).我不想把压缩的负担放在用户身上.
如果可能的话,我宁愿避免使用Flash或变体. 如果可能的话,我正在寻找一个直接的javascript/HTML解决方案.请注意,这排除了以下答案:什么是通过http上传多个文件的最佳客户端浏览器库?.
我可以通过这个例子上传一个带烧瓶的文件:
但我不知道如何上传文件夹或一些文件.我搜索过,我发现了这个: 用Flask上传多个文件.最后,我得到了如何上传多文件上传.我会告诉你下面的代码:(这是一个好习惯吗?我不知道)
.
??? manage.py
??? templates
? ??? file_upload.html
? ??? hello.html
??? uploads
??? BX6dKK7CUAAakzh.jpg
??? sample.txt
Run Code Online (Sandbox Code Playgroud)
但是,我仍然不知道如何上传属于该文件夹的文件夹和文件.你能告诉我怎么样?
我正在处理的目录树:
from flask import Flask,abort,render_template,request,redirect,url_for
from werkzeug import secure_filename
import os
app = Flask(__name__)
UPLOAD_FOLDER = './uploads'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
@app.route('/')
def index():
return redirect(url_for('hello'))
@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name = None):
return render_template('hello.html',name=name)
@app.route('/upload/',methods = ['GET','POST'])
def upload_file():
if request.method =='POST':
file = request.files['file']
if file:
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'],filename))
return hello()
return render_template('file_upload.html')
if __name__ == …Run Code Online (Sandbox Code Playgroud) 我有一个放置区域,我想检测被拖动的项目是文件夹还是文件.在chrome中我通过使用实现了这一点
for (var i = 0; i < nrOfFiles; i++) {
var entry = e.originalEvent.dataTransfer.items[i].webkitGetAsEntry();
if (entry.isDirectory) {
//folder detection
}
Run Code Online (Sandbox Code Playgroud)
在Firefox中,无法使用上述解决方案(webkit),在花了很多时间试图解决这个问题后,我想出了以下解决方案(并且失败了)
我检查拖动的项目是否没有类型和大小,如下所示,并且在大多数情况下它按预期工作.从我所看到的这个效率并不高,因为有些文件可能没有文件扩展名,所以我尝试用FileReader API读取文件为二进制字符串(readAsBinaryString)或readAsArrayBuffer,并在项目为的情况下捕获异常不可读,但永远不会抛出异常.
var files = e.originalEvent.dataTransfer.files;
for (var i = 0; i < nrOfFiles; i++) {
if (files[i].size === 0 && files[i].type==="") {
try{
var reader = new FileReader();
reader.readAsBinaryString(files[i]);
}catch(e){
//folder detection ?
}
}}
Run Code Online (Sandbox Code Playgroud)在下面的解决方案中,我正在尝试使用mozGetDataAt,这是相应的webkitGetAsEntry(???不是100%关于这个请纠正我,如果我错了)但我得到一个安全例外.
var entry = e.originalEvent.dataTransfer.mozGetDataAt("application/x-moz-file",i);
if (entry.isDirectory) { //not even reaching this statement. idk if isDirectory is applicable to entry
//folder detection? …Run Code Online (Sandbox Code Playgroud)我想允许用户在网页上选择本地目录(然后读取目录中的所有文件).
在Chrome中,我可以添加该webkitdirectory属性以启用此功能.根据评论这个问题和回答这个问题,你应该能够用做同样的在Firefox mozdirectory,但我无法得到它的工作.
我在Firefox中试过以下没有运气(适用于Chrome):
<input type="file" id="files" name="files[]" multiple mozdirectory="" webkitdirectory="" directory="" />
Run Code Online (Sandbox Code Playgroud)
我的Firefox版本是10.0.
有没有办法让用户在Firefox中选择一个输入目录,而无需在客户端添加插件(如Flash)?
我在我的项目中使用 Google Chrome 的文件夹上传功能,如下所述: 如何在我自己的代码中使用 Google Chrome 11 的上传文件夹功能?
我有一个按钮,单击时会触发输入字段。我的问题是如何检查浏览器是否支持 webkitdirectory ?所以我可以隐藏我的按钮或提醒用户使用 chrome 来提供此服务。
<button>Upload Folder</button>
<input type="file" name="file[]" multiple webkitdirectory>
<script>
$("button").click(function(e) {
/* TODO: Detect webkitdirectory support */
if(webkitdirectory)
$('input').trigger('click');
else
alert('Use Chrome!');
});
</script>
Run Code Online (Sandbox Code Playgroud) 是否可以使用Javascript上传整个文件夹而不是多个文件?如果是这样,那么方法是什么.如果没有直接的方法,是否有任何解决方法来实现相同的目标?我一直对这个话题感到好奇.任何见解都会有所帮助.
有一种简单的方法允许用户从Django表单中选择一个文件夹吗?我想使用与FileField相同的小部件,但只允许用户选择一个文件夹,以便我可以处理该文件夹中的所有文件.
谢谢.