0

필자는 base64 인코딩을 통해 django rest framework에 파일을 업로드하는 ionic/angular js 웹 앱을 보유하고 있습니다. 그런 다음 django-storages (1.5.1) 라이브러리의 도움을 받아 AWS S3 버킷에 파일을 저장합니다.AWS S3 Base64 파일 업로드가 iPad 또는 Android에서 작동하지 않지만 노트북 사파리 또는 Chrome에서 작동 중

Chrome (Windows) 또는 Safari (Macbook)에서 webapp에 액세스하고 이미지와 파일을 업로드하는 것이 좋습니다.

의 오류, 크롬 (안드로이드 폰) 나 사파리 (아이 패드)에서 웹 애플리케이션을 실패 액세스 : 분명히

XMLHttpRequest cannot load [api url]. Origin [webapp url] is not allowed by Access-Control-Allow-Orign. 

, 그것은, 바로 CORS 문제입니까? 하지만 양식 입력 데이터를 업로드 할 수 있습니다. 파일 업로드 (JSON Restful PUT의 base64 콘텐츠)가 오류를 던진 것 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> 
<CORSRule> 
    <AllowedOrigin>*</AllowedOrigin> 
    <AllowedMethod>GET</AllowedMethod> 
    <AllowedMethod>PUT</AllowedMethod> 
    <AllowedMethod>POST</AllowedMethod> 
    <MaxAgeSeconds>3000</MaxAgeSeconds> 
    <AllowedHeader>Authorization</AllowedHeader> 
</CORSRule> 

어떤 생각하거나 문제가 될 수있는 방향으로 유도합니다 :

완성도를 들어, 내 AWS S3 CORS 구성은?

답변

0

해결되었습니다.

파일 업로드 크기에 문제가있었습니다 - Nginx는 1MB로 들어오는 HTTP 요청의 크기를 캡핑했습니다.

HTTP PUT 요청이 에 Base64 인코딩을 사용하여 파일이 업로드 되었기 때문에 HTTP 호출이 너무 커질 수있었습니다.

컴퓨터/랩톱에서 테스트 파일을 업로드하면 파일 크기가 작아집니다.

업로드를 테스트하기 위해 휴대 전화 나 태블릿으로 사진을 찍을 때 큰 파일 이었으므로 문제가됩니다.

서버에 로그인하고 nginx.config를 "client_max_body_size"를 늘려 업데이트하면 내 문제가 해결됩니다. 여기

전체 지침 : https://www.cyberciti.biz/faq/linux-unix-bsd-nginx-413-request-entity-too-large/

+0

또 하나의 이유는 base64 인코딩 이미지를 귀하의 의견에 대한 – e4c5

+0

e4c5 @ 감사를 방지 할 수 있습니다. 나는 당신의 관점에 관심이 있습니다. base64 인코딩이 권장되지 않는 이유는 무엇입니까? – aero

+0

디코딩을 인코딩하는 추가 컴퓨팅. 캐시 할 수 없습니다. 파일 크기가 30 % 증가합니다 – e4c5