如何在客户端处理上传的文件,而无需使用 Dash/Streamlit/Flask/其他东西将它们上传到服务器?

How to process uploaded files on the client side without uploading them to the server with Dash/Streamlit/Flask/something else?

提问人:b.dot 提问时间:11/6/2022 更新时间:11/6/2022 访问量:248

问:

特别是,我想从上传的图像中提取EXIF数据。

我更喜欢在 Python 中执行此操作,但是我只找到了在 JS 中提取客户端 EXIF 数据的解决方案。这是我找到的JS库:https://github.com/exif-js/exif-js 与Dash客户端回调功能一起在文件上传后运行JS代码:https://dash.plotly.com/clientside-callbacks

这是我试图让它工作,但是在上传图像后它似乎没有做任何事情:

import dash
from dash import dcc
from dash import html
from dash.dependencies import Input, Output
import plotly.express as px
import pandas as pd


app = dash.Dash(__name__, external_scripts=['https://cdn.jsdelivr.net/npm/exif-js'],)
app.title = "Get exif"


app.layout = html.Div(
    [
        dcc.Upload(
        id='upload-upload_images',
        children=html.Div([
            'Drag and Drop or ',
            html.A('Select Files')
        ]),
        style={
            'width': '100%',
            'height': '60px',
            'lineHeight': '60px',
            'borderWidth': '1px',
            'borderStyle': 'dashed',
            'borderRadius': '5px',
            'textAlign': 'center',
            'margin': '10px'
        },
        # Allow multiple files to be uploaded
        multiple=True
        ),
        html.Div(id='display_exif'),
    ]
)

app.clientside_callback(
    """
    window.onload=getExif;
    function getExif(file_list) {
        var img1 = file_list[0];
        var my_exif = EXIF.getData(img1, function() {
            var make = EXIF.getTag(this, "Make");
            var model = EXIF.getTag(this, "Model");
            var makeAndModel = document.getElementById("makeAndModel");
            makeAndModel.innerHTML = `${make} ${model}`;
        });
        return my_exif
    }
    """,
    Output('display_exif', 'children'),
    Input('upload-data', 'contents'),
)

app.run_server(debug=False)

如果这在 Streamlit 中是可能的,那就太棒了,如果不能,那么在 Dash、Flask 或 Python 中的任何其他方式中。我没有 JS 的经验,所以之后我想将提取的 EXIF 数据放回 Python 中以进一步使用它。

非常感谢任何帮助!

JavaScript python plotly-dash 客户端 streamlit

评论

0赞 Guven Degirmenci 11/6/2022
你能检查一下这个答案吗?stackoverflow.com/a/4765242/7493063
0赞 b.dot 11/6/2022
感谢您的回复!这似乎需要首先将图像上传到服务器。或者至少我不知道它将如何在客户端应用

答: 暂无答案