好吧所以我正在尝试将调整大小的画布图像作为文件上传到Flask.
首先,我尝试使用canvas.toDataURL()
它将其转换为base64(?)字符串,然后尝试使用formdata
AJAX 将其作为图像上传,没有运气.
然后我尝试使用此函数将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; }
不是形象......
这是我使用的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
到目前为止我所拥有的服务器:
@app.route('/requests/', 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))
所有这些都是非常重要的
我非常有信心javascript正在很好地发送数据,因为许多其他stackoverflow问题对PHP服务器使用相同的方法,并且服务器确实收到了数据.
我的问题是我不知道如何将这些数据转换为物理文件存储到目录中?
我尝试过使用上传教程,但数据不是文件,因此不起作用.
我找到了一个关于如何上传blob的教程(我认为?)但它不起作用,因为它使用了未定义的"文件".
有什么办法可以通过flask或js将这些数据转换成物理图像文件吗?
谢谢!