2012-11-08 32 views
0

我已經能夠創建一個獨立的附件,但作爲多/表單數據的CONTENT_TYPE結束。我做錯了什麼?代碼之後是帖子的回覆,然後是請求;您可以在請求中看到請求有效內容中的內容類型是正確的。如何設置一個獨立的附件內容類型

代碼:

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

您的代碼PUT'ing整個形式的CouchDB的身體。我懷疑如果你看附件,你會發現不僅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將提交文件的原始數據,以及設置基於該文件條目的。類型屬性的MIME類型。

注意,至少某些瀏覽器沒有爲文件提供一個很好的MIME類型的猜測,所以你可能仍然結束了「應用程序/八位字節流」的類型,除非你通過xhr.setRequestHeader()提供自己的覆蓋。