Javascript 使用Flask使用AJAX上传画布数据
我正在尝试使用AJAX将画布图像数据上传到flask服务器。我获取图像数据,然后将其转换为blob并使用AJAX发布 我遇到的问题是,我只指定了某些文件类型来实现安全性,我认为Blob不算作这些文件类型之一 下面是我用于flask视图的代码Javascript 使用Flask使用AJAX上传画布数据,javascript,python,ajax,http,flask,Javascript,Python,Ajax,Http,Flask,我正在尝试使用AJAX将画布图像数据上传到flask服务器。我获取图像数据,然后将其转换为blob并使用AJAX发布 我遇到的问题是,我只指定了某些文件类型来实现安全性,我认为Blob不算作这些文件类型之一 下面是我用于flask视图的代码 import sys from app import app import os from flask import Flask, request, render_template, redirect, url_for from werkzeug impor
import sys
from app import app
import os
from flask import Flask, request, render_template, redirect, url_for
from werkzeug import secure_filename
UPLOAD_FOLDER = '/home/tr0uble/work/Collabart/app/uploads'
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app.config['UPLOAD_FOLDER'] = "/home/tr0uble/work/Collabart/app/uploads"
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'POST':
file = request.files['image']
print(file, file=sys.stderr)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
return redirect(url_for('uploaded_file', filename=filename))
return render_template('index.html')
下面是发送AJAX请求的JavaScript
function base64toBlob(base64Data, contentType) {
canvas = document.getElementById("mainCanvas");
if (canvas.toBlob) {
canvas.toBlob(
function (blob) {
fd = new FormData();
fd.append('image', blob);
$.ajax({
type: 'POST',
url: '/',
data: fd,
processData: false,
contentType: false
}).done(function(data) {
console.log(data);
});
},
'image/png'
);
}
}
function canvasSave(imageData){
blob = base64toBlob(imageData, 'image/png');
}
$( document ).ready(function() {
$('#mainCanvas').jqScribble(width=800,height=800);
var context = mainCanvas.getContext("2d");
context.imageSmoothingEnabled = true;
$('#mainCanvas').data('jqScribble').update({saveFunction: canvasSave});
});
我得到的错误是代码if文件和允许的文件(file.filename):
中的行未被接受为true。我认为这是因为如果我打印变量filefile=request.files['image']
的值,那么这就是输出的值
我仍然希望有允许的扩展,这样AJAX请求就不能更改为包含HTML文件。是否可以将画布转换为base64图像字符串<代码>canvas.toDataURL()代码>@DBS这就是canvasSave函数的作用。它被传递一个base64图像字符串,然后该字符串被转换为blob。我无法直接将其作为base64字符串上传,因此我使用了该方法。我知道我的方法可能不是很好。将画布转换为base64图像字符串是一个选项吗<代码>canvas.toDataURL()代码>@DBS这就是canvasSave函数的作用。它被传递一个base64图像字符串,然后该字符串被转换为blob。我无法直接将其作为base64字符串上传,因此我使用了该方法。我知道我的方法可能不是很好。可能是重复的