2017-01-16 2 views
0

저는 Axis를 사용하여 Fat Free에 AJAX 요청을합니다.Fat Free가 파일 업로드로 Axios FormData를 캐치하지 못했습니다.

여기 리시버 코드입니다 : (. 내가 Axios의이 일을하는 데 사용하는 현재)

$files = \Web::instance()->receive(function($file){ 
    var_dump($file); 
    return (substr($file["type"],0,6)=="image/"); 
}, true); 
if($files===false) 
    throw new \Exception\UnexpectedInput("U didn't provide any file"); 

여기에 발신자의

return new Promise((ok,err)=>{ 
    var datanya = new FormData(); 
    datanya.append(this.generateRandomString(), new Blob([file[0]], {type:"image/jpeg"}), "image.jpg"); 
    // generate id for cancelation. 
    this.uploadCancelSource = CancelToken.source(); 
    var config = { 
     cancelToken: this.uploadCancelSource.token, 
     onUploadProgress:(e)=>{ 
      this.uploadProgress = Math.round((e.loaded * 100)/e.total); 
     } 
    } 
    APICall.put("invoice/bukti", datanya, config).then(e=>{ 
    }); 
}); 

페이로드 나를 위해 괜찮을 것 같다, 내 말은, 파일 이름, 내용 유형 및 양식 이름을 전송합니다. 그러나 FatFree Web의 수업은 그것을 잡지 못했습니다. 그것은 단지 그것이 application/octet-stream임을 말하고 있습니다.

다음은 페이로드

Request Dumping SS

에 대한 screenshoot입니다 그리고 여기 당신은 문제를 알고 \Web::instance()->receive

Dumped data from server

에서 덤프 된 데이터는?

+1

이것은 'PUT'및 'POST'문제인 것 같습니다. https://github.com/bcosca/fatfree/blob/master/lib/web.php#L173 https : // gist. github.com/ebhel/2410898 파일을 서버에 보내려면'PUT'을 사용해야합니다. : – Chris

+0

왜'PUT'이 필요한가요?'receive()'를 호출하기 전에'$ f3-> VERB = 'POST'를 시도해 볼 수는 있지만 엉뚱한 해킹입니다 .. – xfra35

+1

은 클라이언트 측 업로드 구현에 달려 있습니다. 한 번 전에 blueimp jquery 업 로더에'$ f3-> VERB = 'POST'를 사용해야했지만, 꽤 잘 돌아갔습니다. 조금 익숙해 보이지만 업 로더가 일반적인 규칙을 따르지 않는다면 합리적인 해킹 IMO입니다 – ikkez

답변

0

Web의 현재 동작이 주된 문제입니다. source code에서 보시거나 documentation을 보시면 다른 요청 방법에 따라 다른 동작을 보입니다.

작은 해킹은 현재 문제를 해결하는 데 사용할 수 있지만 요청 방법을 변경하기로 결정했습니다.

관련 문제