bny*_*ynn 6 javascript python ajax canvas flask
好吧所以我正在尝试将调整大小的画布图像作为文件上传到Flask.
首先,我尝试使用canvas.toDataURL()它将其转换为base64(?)字符串,然后尝试使用formdataAJAX 将其作为图像上传,没有运气.
然后我尝试使用此函数将base64转换为blob:
function toblob(stuff) {
var g, type, bi, ab, ua, b, i;
g = stuff.split(',');
if (g[0].split('png')[1])
type = 'png';
else if (g[0].split('jpeg')[1])
type = 'jpeg';
else
return false;
bi = atob(g[1]);
ab = new ArrayBuffer(bi.length);
ua = new Uint8Array(ab);
for (i = 0; i < bi.length; i++) {
ua[i] = bi.charCodeAt(i);
}
b = new Blob([ua], {
type: "image/" + type
});
return b;
}
Run Code Online (Sandbox Code Playgroud)
不是形象......
这是我使用的ajax表单:
s = new FormData();
s.append('image', toblob(d)); \\I believe I refer to this with request.files['image']?
var g = $.ajax({
url: 'url',
type: 'POST',
processData : false,
contentType : false,
data: s
}) //POSTDATA
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的服务器:
@app.route('/requests/<req>', methods=['POST'])
def requests(req=None):
if req == 'upload' and request.method == 'POST' and request.files['file']:
file = request.files['image'] \\referring to formdata() key
if file and allowed_file(file.filename):
n = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'],n))
return redirect(url_for('index', p=n))
Run Code Online (Sandbox Code Playgroud)
所有这些都是非常重要的
我非常有信心javascript正在很好地发送数据,因为许多其他stackoverflow问题对PHP服务器使用相同的方法,并且服务器确实收到了数据.
我的问题是我不知道如何将这些数据转换为物理文件存储到目录中?
有什么办法可以通过flask或js将这些数据转换成物理图像文件吗?
谢谢!
找到了解决办法!而不是使用 Flask's file.save(),我使用了werkzeug'sFileStorage() which(据我所知)file.save()我使用它的原始版本,通过指定filenameand stream(这是一个 blob 仅供参考),如下所示:
FileStorage(stream=request.files['image']).save(os.path.join(app.config['AUTHOR_FOLDER'],'testpic.jpg')))
Run Code Online (Sandbox Code Playgroud)
把它放到脚本中,避开 400 秒的错误,几乎没有拼凑出一个工作函数!哈哈。
它有效,但我不知道它有多安全或有多稳定,现在就用它。如果有人有任何经验,请帮助我。谢谢!
生活真棒!