簡體   English   中英

如何將畫布轉換為圖像上傳到燒瓶?

[英]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服務器使用相同的方法,並且服務器確實收到了數據。

我的問題是我不知道如何將這些數據轉換為物理文件存儲到目錄中?

  • 我嘗試過使用上傳教程,但數據不是文件,因此不起作用。
  • 我找到了一個關於如何上傳blob的教程 (我認為?)但它不起作用,因為它使用了未定義的“文件”。

有什么辦法可以通過flask或js將這些數據轉換成物理圖像文件嗎?

謝謝!

找到了解決方法! 而不是使用Flask的file.save() ,我使用了werkzeug的FileStorage() (據我所知) file.save()的原始版本我通過指定filenamestream (這是一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM