2012-08-12 2 views
1

내 서버에 Sprite를 저장하는 중 흥미로운 문제가있는 것 같습니다. 내 MAC에서 swf (원격)를 실행할 때 제대로 작동하지만 내 Windows 컴퓨터에서 똑같은 URL을 실행하면 # 2048 SecurityError가 발생합니다. 여기AS3 SecurityError # 2048 Mac 대 Windows

내 AS3 코드 :

public function saveSprite(s:Sprite):void { 
     var bmpData:BitmapData = new BitmapData(s.width, s.height, true, 0xFFFFFF); 
     bmpData.draw(s); 
     var byteArray:ByteArray = PNGEncoder.encode(bmpData); 
     var encodedFile:Base64Encoder = new Base64Encoder(); 
     encodedFile.encodeBytes(byteArray); 

     var data:URLVariables = new URLVariables(); 
     data.fileData = encodedFile; 
     data.fileName = "test.png"; 
     data.location = "temp/"; 

     var request:URLRequest = new URLRequest(scriptLocation); 
     request.method = URLRequestMethod.POST; 
     request.data = data; 

     var loader:URLLoader = new URLLoader(); 
     loader.addEventListener(Event.COMPLETE, errorLog); 
     loader.addEventListener(Event.OPEN, errorLog); 
     loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, errorLog); 
     loader.addEventListener(IOErrorEvent.IO_ERROR, errorLog); 
     loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, errorLog); 
     loader.addEventListener(ProgressEvent.PROGRESS, errorLog) 

     try { 
      loader.load(request); 
     } catch (e:*) { 
      debug.updateLog(e + "\n"); 
     } 
    } 

    private function errorLog(e:*):void { 
     debug.updateLog(e + "\n"); 
    } 

AS3는 다음과 같은 한 줄 PHP 파일과 연결 : 내 맥에 SWF를 실행하면

<?php file_put_contents($_POST['location'] . $_POST['fileName'], base64_decode($_POST['fileData'])); 

출력은 다음과 같다 : 로그 시작 [이벤트 유형 = "취소"거품 = false cancelable = false eventPhase =[이벤트 유형 = "완료"bubbles = false cancelable = false eventPhase = 2]

Windows에서 나는 어디에서 얻을 수 있습니까? 다음 출력 : 로그 시작 [HTTPStatusEvent type = "httpStatus"bubbles = false cancelable = false eventPhase = 2 status = 0 responseURL = null][SecurityErrorEvent type = "securityError"bubbles = false cancelable = false eventPhase = 2 text = "오류 # 2048"]

이것에 대한 의견을 보내 주시면 감사하겠습니다. 내 자신의 추측은 파일 사용 권한이 있지만 무엇입니까?

미리 감사드립니다.

[편집] 더 재미 있습니다. 1. 프로젝트 전체를 다른 서버로 옮길 때 Windows와 Mac에서 # 2048을 얻습니다. 2. 내 파일 사용 권한을 777로 변경하면 Windows 및 Mac에서도 # 2048이 표시됩니다.

답변

1

마침내! 나는 그것을 발견했다.

내 웹 서버의 루트에 crossdomain.xml을 추가하면 문제가 해결되었습니다. 내가 액세스하는 PHP 파일이 동일한 서버에 있기 때문에 이것이 문제를 해결한다는 것이 나에게 이상한 것처럼 보입니다. 뿐만 아니라, 그것은 같은 폴더에 있습니다!

MAC OSX에서 flashplayer는 요청이 동일한 도메인 내에 있지만 Windows에서는 허용되지 않는 것으로 인식합니다. 그러면 Windows에서 보안 오류가 발생하는 이유를 알 수 있습니다. 그 결과 내 swf는 MAC에서 작동하지만 Windows 시스템에서는 작동하지 않습니다. 지금은 내 서버의 루트에 다음에 crossdomain.xml 파일을 추가 한 :

<?xml version="1.0" ?> 

<cross-domain-policy> 
    <site-control permitted-cross-domain-policies="master-only"/> 
    <allow-access-from domain="*.mydomain.com" to-ports="*"/> 
    <allow-http-request-headers-from domain="*.mydomain.com" headers="*"/> 
</cross-domain-policy> 

당신이 허용 할 특정 도메인에 'mydomain.com'을 변경하십시오이 솔루션을 사용합니다. crossdomain.xml이에 대한 모든 것을 읽고 어떻게 여기에이 기능을 사용하려면 [는 SecurityErrorEvent 유형 = "오류 SecurityError"거품 = false를 취소 할 수 = 거짓의 EventPhase = 2 텍스트 = ": 나는 다음과 같은 오류가 잡혔다 질문에 명시된 바와 같이 http://learn.adobe.com/wiki/download/attachments/64389123/CrossDomain_PolicyFile_Specification.pdf?version=1

"일반적으로 오류가 포함]

참고 : [는 SecurityErrorEvent 유형 ="오류 # 2048에서 SecurityError "거품 = false를 취소 할 수 = 거짓의 EventPhase = 2 텍스트"오류 # 2048 : 보안 샌드 박스 위반 : http://www.domain1.com/file.swfhttp://www.domain2.com/file에서 데이터를로드 할 수 없습니다 .* "]

오류의 일부가 동일한 도메인에있는 파일이 요청되는 것을 나타낼 수 있습니다 내 경우에는없는 사실.

그래서 crossdomain.xml이 나는이 대답을 트릭! 희망 않았다 누군가에게 유익 할 것입니다.

해피 코딩!