Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 连接反应区上传器和烧瓶_Javascript_Python_Reactjs_Flask - Fatal编程技术网

Javascript 连接反应区上传器和烧瓶

Javascript 连接反应区上传器和烧瓶,javascript,python,reactjs,flask,Javascript,Python,Reactjs,Flask,我想连接我的Flask后端,并通过表单将文件(图像)发送到后端。但是我在访问上传的图像时遇到问题。服务器的响应为:“400错误请求:浏览器(或代理)发送了一个此服务器无法理解的请求。” 如何从React组件访问上传到后端的映像 图像上载请求的路径: @app.route("/sell", methods=['GET', 'POST']) def sell(): if session.get("user_id") is None:

我想连接我的Flask后端,并通过表单将文件(图像)发送到后端。但是我在访问上传的图像时遇到问题。服务器的响应为:“400错误请求:浏览器(或代理)发送了一个此服务器无法理解的请求。” 如何从React组件访问上传到后端的映像

图像上载请求的路径:

    @app.route("/sell", methods=['GET', 'POST'])
def sell():
    if session.get("user_id") is None:
        return render_template("register.html")

    if request.method == 'POST':
        print(request)
        try:            
            brand = request.form.get("brand")
            model = request.form.get("model")
            condition = request.form.get("condition")
            gender = request.form.get("gender")
            year = request.form.get("year")
            movement = request.form.get("movement")
            price = request.form.get("price")
            description = request.form.get("description") 
            created = datetime.now().isoformat()
        
            with sql.connect("mydb.db") as con:
                cur = con.cursor()
                cur.execute("INSERT INTO items (brand, model, condition, gender, year, movement, price, description, created, item_owner) VALUES (?,?,?,?,?,?,?,?,?,?)", (brand, model, condition, gender, year, movement, price, description, created, session["user_id"]))
                file_entry = query_db('SELECT last_insert_rowid()')
                image = request.files['file']

                # flask image upload procedure from https://pythonise.com/series/learning-flask/flask-uploading-files
                if image:                
                    # Check if the image has a name
                    if image.filename == "":
                        return render_template("/sell.html", msg = "Selected image has no name")

                    if allowed_image(image.filename):
                        filename = ''.join(random.choices(string.ascii_lowercase + string.ascii_uppercase + string.digits, k=8)) + secure_filename(image.filename) 
  
                        image.save(os.path.join(app.config["IMAGE_UPLOADS"], filename))


                    cur.execute("INSERT INTO images (item, user, date, path) VALUES (?,?,?,?)", (1, session["user_id"], created, "/static/images/{}".format(filename)))

            
            con.commit()

            return render_template("watch.html", item_id = 14)
            con.close()
反应码

    import React from "react";
import ReactDOM from "react-dom";
import 'react-dropzone-uploader/dist/styles.css';
import Dropzone from 'react-dropzone-uploader';

const ImageAudioVideo = () => {
    const getUploadParams = ({ meta }) => {
      const url = 'http://127.0.0.1:5000/sell'
      return { url, meta: { fileUrl: `${url}/${encodeURIComponent(meta.name)}` } }
    }
  
    const handleChangeStatus = ({ meta }, status) => {
      console.log(status, meta)
    }
  
    const handleSubmit = (files, allFiles) => {
      console.log(files.map(f => f.meta))
      allFiles.forEach(f => f.remove())
    }
  
    return (
      <Dropzone
        getUploadParams={getUploadParams}
        onChangeStatus={handleChangeStatus}
        onSubmit={handleSubmit}
        accept="image/*,audio/*,video/*"
        inputContent={(files, extra) => (extra.reject ? 'Image, audio and video files only' : 'Drag Files')}
        styles={{
          dropzoneReject: { borderColor: 'red', backgroundColor: '#DAA' },
          inputLabel: (files, extra) => (extra.reject ? { color: 'red' } : {}),
        }}
      />
    )
  }
  
<ImageAudioVideo />

const rootElement = document.getElementById("react-root");
ReactDOM.render(<ImageAudioVideo />, rootElement);
从“React”导入React;
从“react dom”导入react dom;
导入'react dropzone uploader/dist/styles.css';
从“react Dropzone uploader”导入Dropzone;
常量图像音频视频=()=>{
const getUploadParams=({meta})=>{
常量url=http://127.0.0.1:5000/sell'
返回{url,meta:{fileUrl:`${url}/${encodeURIComponent(meta.name)}`}
}
const handleChangeStatus=({meta},status)=>{
console.log(状态,元)
}
const handleSubmit=(文件,所有文件)=>{
log(files.map(f=>f.meta))
allFiles.forEach(f=>f.remove())
}
返回(
(extra.reject?'Image,audio and video files only':'Drag files'))
风格={{
dropzoneReject:{borderColor:'红色',backgroundColor:'#DAA'},
inputLabel:(文件,额外)=>(extra.reject?{color:'red'}:{}),
}}
/>
)
}
const rootElement=document.getElementById(“react root”);
render(,rootElement);

您的服务器可能未配置为响应CORS请求

react dropzone uploader在上载之前执行选项请求。您只需使用模块启用此功能即可

只需使用应用程序初始化CORS模块,即可使用CORS装饰所有路线,而且应该可以正常工作

从烧瓶导入烧瓶
从LASKU cors进口cors
app=烧瓶(名称)
CORS(应用程序)

您的服务器可能未配置为响应CORS请求

react dropzone uploader在上载之前执行选项请求。您只需使用模块启用此功能即可

只需使用应用程序初始化CORS模块,即可使用CORS装饰所有路线,而且应该可以正常工作

从烧瓶导入烧瓶
从LASKU cors进口cors
app=烧瓶(名称)
CORS(应用程序)