1

Intel XDK Newを使用してアプリを開発しています。私が抱えている問題は、Intel XDK JavaScript Bridge API、特にuploadToServer メソッドに関係しています。

C# MVC4 を使用して単純なサーバー バックエンドを作成しました。モバイル デバイスから撮影した写真をアップロードするための作業コードがありますが、サーバー上のアップロード URL に認証を要求するとコードが失敗します。

MVC 認証が正確にどのように機能するかはわかりませんが、Cookie といくつかの http ヘッダーを組み合わせて使用​​していると思いますか? 明確にするために、私はMVC Forms Authenticationを使用しています。ただし、サーバーは実際にはフォームを使用したり、ビューを返したりしません。ビューの代わりに 404 を返すように、認証が必要なイベントを変更しました。

本当の問題は、Intel XDK に精通している人は、uploadToServer メソッドが認証 Cookie/ヘッダーも渡すことができるかどうか、またはそれが機能するかどうかを知っていますか? これまでのところ、サーバーへのすべてのリクエストは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);
    }
}

マイ JavaScript

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="";
}
4

1 に答える 1

0

試してみるべきだと思います.CORSテクノロジーを使用する以前のプロジェクトで使用していました。

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

于 2015-04-07T20:43:42.853 に答える