简体   繁体   中英

How to overcome a post 405 error on windows 2012 R2 server

I have a small test application to record the camera and sent the file to a directory on my server. The main file is as follow:

 <!DOCTYPE html> <html> <head> <script src="https://cdn.WebRTC-Experiment.com/RecordRTC.js"></script> <style> video { max-width: 100%; border: 5px solid yellow; border-radius: 9px; } body { background: black; } h1 { color: yellow; } </style> </head> <body> <h1 id="header">RecordRTC Upload to PHP</h1> <video id="your-video-id" controls="" autoplay=""></video> <script type="text/javascript"> // capture camera and/or microphone navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(function(camera) { // preview camera during recording document.getElementById('your-video-id').muted = true; document.getElementById('your-video-id').srcObject = camera; // recording configuration/hints/parameters var recordingHints = { type: 'video' }; // initiating the recorder var recorder = RecordRTC(camera, recordingHints); // starting recording here recorder.startRecording(); // auto stop recording after 5 seconds var milliSeconds = 5 * 1000; setTimeout(function() { // stop recording recorder.stopRecording(function() { // get recorded blob var blob = recorder.getBlob(); // generating a random file name var fileName = getFileName('webm'); // we need to upload "File" --- not "Blob" var fileObject = new File([blob], fileName, { type: 'video/webm' }); uploadToPHPServer(fileObject, function(response, fileDownloadURL) { if(response !== 'ended') { document.getElementById('header').innerHTML = response; // upload progress return; } document.getElementById('header').innerHTML = '<a href="' + fileDownloadURL + '" target="_blank">' + fileDownloadURL + '</a>'; alert('Successfully uploaded recorded blob.'); // preview uploaded file document.getElementById('your-video-id').src = fileDownloadURL; // open uploaded file in a new tab window.open(fileDownloadURL); }); // release camera document.getElementById('your-video-id').srcObject = null; camera.getTracks().forEach(function(track) { track.stop(); }); }); }, milliSeconds); }); function uploadToPHPServer(blob, callback) { // create FormData var formData = new FormData(); formData.append('video-filename', blob.name); console.log("blob.name:"); console.log(blob.name); formData.append('video-blob', blob); callback('Uploading recorded-file to server.'); makeXMLHttpRequest('https://xxx/yyy/', formData, function(progress) { if (progress !== 'upload-ended') { callback(progress); return; } var initialURL = 'https://xxx/yyy/' + blob.name; callback('ended', initialURL); }); } function makeXMLHttpRequest(url, data, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { if (request.responseText === 'success') { callback('upload-ended'); return; } alert(request.responseText); return; } }; request.upload.onloadstart = function() { callback('PHP upload started...'); }; request.upload.onprogress = function(event) { callback('PHP upload Progress ' + Math.round(event.loaded / event.total * 100) + "%"); }; request.upload.onload = function() { callback('progress-about-to-end'); }; request.upload.onload = function() { callback('PHP upload ended. Getting file URL.'); }; request.upload.onerror = function(error) { callback('PHP upload failed.'); }; request.upload.onabort = function(error) { callback('PHP upload aborted.'); }; request.open('POST', url); request.send(data); } // this function is used to generate random file name function getFileName(fileExtension) { var d = new Date(); var year = d.getUTCFullYear(); var month = d.getUTCMonth(); var date = d.getUTCDate(); return 'RecordRTC-' + year + month + date + '-' + getRandomString() + '.' + fileExtension; } function getRandomString() { if (window.crypto && window.crypto.getRandomValues && navigator.userAgent.indexOf('Safari') === -1) { var a = window.crypto.getRandomValues(new Uint32Array(3)), token = ''; for (var i = 0, l = a.length; i < l; i++) { token += a[i].toString(36); } return token; } else { return (Math.random() * new Date().getTime()).toString(36).replace(/\\./g, ''); } } </script> </body> </html>

in the location where the files are stored I have the following file

 <?php // path to ~/tmp directory $tempName = $_FILES['video-blob']['tmp_name']; // move file from ~/tmp to "uploads" directory if (!move_uploaded_file($tempName, $filePath)) { // failure report echo getcwd(); echo " | "; echo 'Problem saving file: '.$tempName .' to ' .$filePath .' Not uploaded because of error #'.$_FILES['video-blob']['error']; if (!is_writable($filePath)) { echo " | "; echo "dir not writable or existing"; } die(); } // success report echo 'success'; ?>

When I run this on my local server it works fine. But when I upload it to my windows 2012 R2 server I get the error

POST https://xxx/yyy/ 405 (Method Not Allowed)

I tried to play with the handler mappings in ISS and disabled WebDAV but no luck. Since it works on the localhost but not on the windows server I figure it must be something related with the IIS setting but can not find out what.

Any help is appreciated.

In the end I found the error myself.

The settings in the web.config file where not standing correctly for FastCgiModule / StaticFileModules.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM