2017-10-16 112 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); 
相關問題