Sto lavorando per cercare di ottenere iOS 6 da utilizzare POST XMLHttpRequest per caricare le immagini. Funziona con i browser Web desktop e Android, ma con iOS 6 ricevo un errore nella pagina che viene pubblicata su: "Richiedi Body Stream Exhausted". (Utilizzo di iOS Simulator con Safari Web Inspector).iOS 6 (iPhone/iPad) l'immagine Caricare "Richiesta corpo flusso Esausto" con NTLM/autenticazione di Windows
Ecco il codice di base della pagina:
function fileSelected() {
var file = document.getElementById('fileToUpload').files[0];
if (file) {
var fileSize = 0;
if (file.size > 1024 * 1024)
fileSize = (Math.round(file.size * 100/(1024 * 1024))/100).toString() + 'MB';
else
fileSize = (Math.round(file.size * 100/1024)/100).toString() + 'KB';
document.getElementById('fileName').innerHTML = 'Name: ' + file.name;
document.getElementById('fileSize').innerHTML = 'Size: ' + fileSize;
document.getElementById('fileType').innerHTML = 'Type: ' + file.type;
}
}
function uploadFile() {
var fd = new FormData();
fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
var xhr = new XMLHttpRequest();
xhr.upload.addEventListener("progress", uploadProgress, false);
xhr.addEventListener("load", uploadComplete, false);
xhr.addEventListener("error", uploadFailed, false);
xhr.addEventListener("abort", uploadCanceled, false);
xhr.open("POST", "/UploadHandler.ashx");
xhr.send(fd);
}
function uploadProgress(evt) {
if (evt.lengthComputable) {
var percentComplete = Math.round(evt.loaded * 100/evt.total);
document.getElementById('progressNumber').innerHTML = percentComplete.toString() + '%';
document.getElementById('prog').value = percentComplete;
}
else {
document.getElementById('progressNumber').innerHTML = 'unable to compute';
}
}
function uploadComplete(evt) {
/* This event is raised when the server send back a response */
alert(evt.target.responseText);
}
function uploadFailed(evt) {
alert("There was an error attempting to upload the file.");
}
function uploadCanceled(evt) {
alert("The upload has been canceled by the user or the browser dropped the connection.");
}
Nel fare questo su qualsiasi altro browser, il conduttore ritorna correttamente e carica il file. Tuttavia, con iOS la pagina ashx ha l'errore "richiesta body stream esaurito".
Ecco uno screenshot della finestra di ispezione:
Tutte le idee?
UPDATE: Questo problema si verifica solo quando l'autenticazione NTLM/Windows è abilitata per l'applicazione in IIS. Con i moduli o l'autenticazione anonima, il caricamento funziona correttamente.
Grazie,
John
che è davvero quello che ho osservato anche.La tua soluzione è interessante. Per il momento (ho inviato un bug ad Apple per vedere se potrebbero ripararlo), ho effettivamente il caricamento del file in un iframe non autenticato che carica un file nella cartella temporanea ASP.NET e restituisce un token che la pagina autenticata viene quindi utilizzata come riferimento quando si recupera il file dalla cartella temporanea. –
C'è una soluzione? Forse usando WCF, o forse usando qualche altra tecnica? Sono su SharePoint e l'autenticazione di Windows è un requisito. – harsimranb