2012-11-08 2 views
0

독립 실행 형 첨부 파일을 만들 수 있었지만 content_type은 multipart/form-data로 끝납니다. 내가 뭘 잘못 했니? 코드 다음에는 게시물의 응답과 요청이 이어집니다. 요청에서 요청 페이로드에서 내용 유형이 올바른지 확인할 수 있습니다.독립 실행 형 첨부 파일 콘텐츠 형식을 설정하는 방법

코드 :

function uploadFile() { 
    var fd = new FormData(); 
    var file = document.getElementById('fileToUpload').files[0]; 
    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("PUT", "http://usr:[email protected]:5984/db_test/testdoc7/"+ file.name +"?rev=1-967a00dff5e02add41819138abb3284d"); 

    xhr.send(fd); 
    } 

응답 :

{ 
    "_id": "testdoc7", 
    "_rev": "2-2841dcd640adb94de525e486be34052e", 
    "_attachments": { 
     "P9025287.JPG": { 
      "content_type": "multipart/form-data; boundary=----WebKitFormBoundary9QNXLDTeW13Gc1ip", 
      "revpos": 2, 
      "digest": "md5-VcoscthaPUYoWHBmCBaAnA==", 
      "length": 3083669, 
      "stub": true 
     } 
    } 
} 

요청 :

Request URL:http://usr:[email protected]:5984/db_test/testdoc7/P9025287.JPG?rev=1-967a00dff5e02add41819138abb3284d 
Request Method:PUT 
Status Code:201 Created 
Request Headersview source 
Accept:*/* 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:3083669 
Content-Type:multipart/form-data; boundary=----WebKitFormBoundary9QNXLDTeW13Gc1ip 
Cookie:AuthSession=YmRyaG9hOjUwOUFFNDg3OnR23NsQsqdQvnKp7HX_0g90grXw 
Host:localhost:5984 
Origin:http://localhost:5984 
Referer:http://localhost:5984/estante_test/_design/library/html5/html5test.html 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11 
Query String Parametersview URL encoded 
rev:1-967a00dff5e02add41819138abb3284d 
Request Payload 
------WebKitFormBoundary9QNXLDTeW13Gc1ip 
Content-Disposition: form-data; name="fileToUpload"; filename="P9025287.JPG" 
Content-Type: image/jpeg 


------WebKitFormBoundary9QNXLDTeW13Gc1ip-- 
Response Headersview source 
Cache-Control:must-revalidate 
Content-Length:71 
Content-Type:text/plain; charset=utf-8 
Date:Wed, 07 Nov 2012 22:45:40 GMT 
ETag:"2-2841dcd640adb94de525e486be34052e" 
Location:http://localhost:5984/estante_test/testdoc7/P9025287.JPG 
Server:CouchDB/1.2.0 (Erlang OTP/R15B) 

답변

1

당신의 코드가 CouchDB를에 전체 양식의 몸을 PUT'ing된다. 첨부 파일을 보면 Content-Type이 정확하지 않다는 것을 알게 될 것입니다. 이런 식으로 뭔가 더 나은 작동합니다 :

function uploadFile() { 
    var file = 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("PUT", "http://usr:[email protected]:5984/db_test/testdoc7/"+ file.name +"?rev=1-967a00dff5e02add41819138abb3284d"); 
    xhr.send(file); 
} 

XHR2 send algorithm이 파일 항목의 .type 속성에 근거 해 MIME 타입을 설정뿐만 아니라 파일의 원시 데이터를 제출하도록 파일 인터페이스는, 물방울에서 상속 때문에이 작동합니다.

적어도 일부 브라우저는 파일에 대한 좋은 MIME 유형 추측을 제공하지 않으므로 xhr.setRequestHeader()을 통해 직접 재정의를 제공하지 않는 한 유형으로 'application/octet-stream'으로 끝날 수 있습니다.