[英]how to convert canvas to image to upload to flask?
好吧所以我正在嘗試將調整大小的畫布圖像作為文件上傳到Flask。
首先,我嘗試使用canvas.toDataURL()
將其轉換為base64(?)字符串,然后嘗試使用帶有AJAX的formdata
將其作為圖像上傳,沒有運氣。
然后我嘗試使用此函數將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/<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))
所有這些都是非常重要的
我非常有信心javascript正在很好地發送數據,因為許多其他stackoverflow問題對PHP服務器使用相同的方法,並且服務器確實收到了數據。
我的問題是我不知道如何將這些數據轉換為物理文件存儲到目錄中?
有什么辦法可以通過flask或js將這些數據轉換成物理圖像文件嗎?
謝謝!
找到了解決方法! 而不是使用Flask的file.save()
,我使用了werkzeug的FileStorage()
(據我所知) file.save()
的原始版本我通過指定filename
和stream
(這是一個blob FYI)使用它像這樣:
FileStorage(stream=request.files['image']).save(os.path.join(app.config['AUTHOR_FOLDER'],'testpic.jpg')))
把它放到腳本中,四處躲過錯誤400s,幾乎沒有廢棄一個工作函數! 哈哈。
它有效,但我不知道它有多安全或多么穩定,現在就開始使用它。 如果有任何經驗,請幫助我。 謝謝!
生活真棒!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.