2017-10-16 255 views
0

我已经搜索了高和低的答案这个问题,我在我的智慧结束。使用多部分/表单数据导致400服务器错误使用瓶,wfastcgi,IIS 6

我正在使用IIS 6在Windows Server 2008上运行一个小型Web服务。该Web服务是使用Flask以Python编写的,而且我正在使用WSGI来连接IIS和Flask。直到我决定允许上传图片为止,它一直工作正常。只要我把enctype="multipart/form-data"一个<form>标签内,任何试图提交表单导致400服务器错误说

坏请求

浏览器(或代理)发送的请求,该服务器可以不明白。

我搜索了互联网,似乎没有人有过我的特殊问题。有问题的形式看起来像

<form method="POST" action="/log?case={{ CASE.id }}" enctype="multipart/form-data"> 
    <input type="hidden" name="case_id" value="{{ CASE.id }}"> 
    <textarea rows="3" cols="75" name="comment"></textarea><br> 
    Case Status: 
    {% if CASE.status=="Closed" %} 
     <select name="status"> 
      <option value="Parked">Parked</option> 
      <option value="Closed" SELECTED>Closed</option> 
      <option value="Open" >Open</option> 
     </select> 
    {% elif CASE.status=="Open" %} 
     <select name="status"> 
      <option value="Parked">Parked</option> 
      <option value="Closed" >Closed</option> 
      <option value="Open" SELECTED>Open</option> 
     </select> 
    {% elif CASE.status=="Parked" %} 
     <select name="status"> 
      <option value="Parked" SELECTED>Parked</option> 
      <option value="Closed">Closed</option> 
      <option value="Open">Open</option> 
     </select> 
    {% else %} 
     <select name="status"> 
      <option value="Parked">Parked</option> 
      <option value="Closed">Closed</option> 
      <option value="Open" SELECTED>Open</option> 
     </select> 
    {% endif %} 
    <br> 
    Computer Location: 
    {% if CASE.location=="Owner" %} 
     <select name="location"> 
      <option value="Storage" >Storage</option> 
      <option value="Owner" SELECTED >Owner</option> 
     </select> 
    {% elif CASE.location=="Storage" %} 
     <select name="location"> 
      <option value="Owner" >Owner</option> 
      <option value="Storage" SELECTED>Storage</option> 
     </select> 
    {% endif %} 
    <br> 
    <input type="file", name="image"> 
    <br /> 
    <input type="submit" name="submit" value="Submit"> 
</form> 

和请求处理程序看起来像

def handleCaseComment(form, files, case_id): 
    # def handleCaseComment(form, case_id): 
    # create SQLAlchemy session 
    sess = db.session 

    # get case comment information 
    comment = form['comment'] 
    status = form['status'] 
    location = form['location'] 
    image = form['image'] 
    if image == "": 
     image = None 
    username = session['username'] 
    technician = Technician.query.filter_by(username=username).first() 
    case = Support_Request.query.filter_by(id=case_id).first() 

    # create the case comment 
    caseComment = Case_Comment(author=technician, 
           content=comment, 
           comp_loc=location, 
           comp_status=status, 
           case=case, 
           image=image) 

    sess.add(caseComment) 
    sess.commit() 

太谢谢你了!

+0

首先,服务器告诉浏览器,它是**浏览器**错误,而不是服务器错误。 400错误单方面意味着“嘿,浏览器,你搞砸了。”这不是内部破坏的情况,比如访问'None'变量的字段,或者除以0。现在,你的意图是?可能不会,我怀疑这是在某个地方启用过滤器的简单问题。你有没有尝试过任何调试语句?它有没有得到你的请求处理程序? – hunteke

回答

0

普通的旧javascript,但这里是一个从JavaScript到烧瓶的功能HTTP请求。刚刚测试过它。我用它来上传图片,然后将这些图片的缩略图提供给浏览器。

document.getElementById(configureFileDrops[0]).addEventListener('drop',function(event){ 
    files = event.dataTransfer.files; 
    form = new FormData(); 
    form.append("index", "1"); 
    for (i = 0; i <files.length; i++){ 
     form.append("file" + String(i), files[i]); 
    } 
    form.enctype = "multipart/form-data" 

    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.responseType = 'arraybuffer'; 

    xmlhttp.onreadystatechange = function(){ 
     if (xmlhttp.readyState ===4 && xmlhttp.status === 200) { 
       //use response here 
     }; 
    xmlhttp.open("POST", '<insert route>', true); 
    xmlhttp.send(form); 


},false); 
相关问题