1

Intel XDK New을 사용하여 앱을 개발 중입니다. 내가 가지고있는 문제는 Intel XDK JavaScript Bridge API, 특히 uploadToServer method입니다.서버가 인증을 요구할 때 Intel XDK에서 서버로 파일 업로드

C# MVC4를 사용하여 간단한 서버 백엔드를 작성했습니다. 모바일 장치에서 가져온 사진을 업로드하기위한 코드가 있지만 서버에서 업로드 URL을 인증해야 할 때 코드가 실패합니다.

MVC 인증이 정확히 작동하는 방식이 불확실합니다. 쿠키와 일부 http 헤더가 혼합되어 있다고 생각합니까? 명확히하기 위해 MVC Forms Authentication을 사용하고 있습니다. 그러나 서버는 실제로 양식을 사용하거나보기를 반환하지 않습니다. 보기 대신 404를 반환하기 위해 인증 필요 이벤트를 수정했습니다.

실제 질문은 Intel XDK에 익숙한 사람이라면 uploadToServer 메소드가 인증 쿠키/헤더/전달할 수 있는지 여부를 알 수 있습니까? 지금까지 서버에 대한 나의 모든 요청은 intel appframework $.ajax method을 사용했습니다. (jQuery가 아닌 것처럼 보입니다.) 인증을 요구하는 Json을 반환하는 서버의 메서드가 있으면이 메서드는 인증 정보를 전달하는 것으로 보이며 모든 것이 올바르게 작동합니다.

내 서버 코드 :

[HandleError] 
[MyAuthorizeAttribute] 
public class PhotosController : Controller 
{ 
    public ActionResult UploadPhoto() 
    { 
     Log.Write("UploadPhoto"); 
     if (Request != null && Request.Files != null && Request.Files.Count > 0) 
     { 
      foreach (string fileName in Request.Files) 
      { 
       if (Request.Files[fileName] == null || Request.Files[fileName].ContentType != "image/jpeg") 
        continue; 

       Request.Files[fileName].SaveAs(Server.MapPath("~/Content/Images/photo.jpg")); 
      } 
      return Json("File(s) Uploaded", JsonRequestBehavior.AllowGet); 
     } 
     return Json("No File(s) to Upload", JsonRequestBehavior.AllowGet); 
    } 
} 

내 자바 스크립트

document.addEventListener("intel.xdk.file.upload.busy", function(evt) { $('#afui').popup("Sorry, a file is already being uploaded"); }); 
document.addEventListener("intel.xdk.file.upload",UploadComplete); 
document.addEventListener("intel.xdk.file.upload.cancel", function(evt) { $('#afui').popup("File upload was cancelled "+evt.localURL); }); 

function MyUploadMethod() {  
    intel.xdk.file.uploadToServer(pictureURL,"http://mywebsite.co.uk/Photos/UploadPhoto", "", "image/jpeg", "UpdateUploadProgress"); 
} 

function UpdateUploadProgress(bytesSent,totalBytes) 
{ 
    if(totalBytes>0) { 
     currentProgress=(bytesSent/totalBytes)*100; 
     document.getElementById("progress").innerHTML=currentProgress+"%"; 
     console.log(currentProgress); 
    }   
} 

function UploadComplete(evt) 
{ 
    if(evt.success===true) 
    { 
     $('#afui').popup("Success"); 
    } 
    else { 
     $('#afui').popup("Error uploading file "+evt.message); 
    } 
    document.getElementById("progress").innerHTML=""; 
} 
+1

[MyAuthorizeAttribute]를 (를) 사용하고 있습니다. 모든 요청은 서버에 클라이언트 요청의 ID를 알려주는 ASPXAUTH라는 쿠키를 보냅니다. 요청에이 쿠키가 없으면 속성이 요청을 차단합니다. 이 인텔 프레임 워크에 익숙하지 않지만 쿠키를 보내거나 승인 속성을 변경하여 요청에서 일부 토큰을 읽고 이러한 종류의 요청을 승인하는 방법을 찾아야합니다. – Fals

답변

0

잘 난 당신이 내가 CORS 기술을 사용하여 내 이전 프로젝트를 위해 그것을 사용했다, 시도한다고 생각합니다.

Response.AppendHeader ("Access-Control-Allow-Origin", "*");