如何使用pycurl将HTML表单的“下拉标签”数据和文件发布到Flask代码中

问题描述

我是curlpycurl的新手。我想提供一种语言的值和多个文件到flask以通过pycurl进行测试。但是,flask函数不接受pycurl的语言,而是保留为None类型。谁能告诉我是否需要任何更正?我的代码如下:

我对单个文件有以下示例curl代码

curl --location --request POST '0.0.0.0:5000/' --form 'files[]=@/home/hostname/datafile/file.wav' --form 'lang=english'

我创建了一个python脚本,用于从文件夹中上传多个(所有)文件

import pycurl
import glob
import urllib
from urllib.parse import urlencode

#language
print('\nInput Language...\n')
crl = pycurl.Curl()
crl.setopt(crl.URL,'http://0.0.0.0:5000/')
data = {'lang':'english'}
l = urlencode(data)
crl.setopt(crl.POSTFIELDS,l)

# files
print('\nInput files...\n')
sourceFolder = '/home/poojaprabhu28/Documents/srcfolder'
src = sourceFolder + '/*'
sourceFiles = glob.glob(src)

for file in sourceFiles:
    print(file)
    crl.setopt(crl.HTTPPOST,[
        ('files[]',(
            # upload the contents of this file
            crl.FORM_FILE,file,)),])
    crl.perform()

crl.close()

以下内容的HTML脚本是(仅插入html标签的定义)

<label>Choose a language:</label>
<select name="lang">
  <option value="none">Choose an option</option>
  <option value="english">English</option>
  <option value="hindi">Hindi</option>
</select>
<br><br><label>Select Files to upload:</label> <input type="file" name="files[]" multiple="true" autocomplete="off" required>

烧瓶功能是:

UPLOAD_FOLDER = '/home/hostname/folder/uploads'

@app.route("/",methods=["POST","GET"])
def api():
    if request.method == 'POST':
        # check if the post request has the files part
        if 'files[]' not in request.files:
            flash('No file part')
            return redirect(request.url)

        language = request.form.get('lang')
        print('language & its type : ')
        print(language)
        print(type(language))
        audio_file = request.files.getlist('files[]')

        for file in audio_file:
            if file and allowed_file(file.filename):
                original_filename = secure_filename(file.filename)
                file.save(os.path.join(app.config['UPLOAD_FOLDER'],original_filename))

if __name__ == '__main__':
    app.run(debug=True,host='0.0.0.0')

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...