2013-04-15 71 views
1

我試圖通過json/ajax上傳文件時出現問題,看起來並不像文件上傳。只有文件的名稱顯示在控制檯輸出中。文件上傳後的JSON回調

我的html代碼如下所示。

<form action="/cgi-bin/upload.cgi" method="post" enctype="multipart/form-data" target="upIFrame"> 

<input type="file" id="uploadFileName" name="uploadFileName" size="30" >&nbsp;                                                                           
<input type="button" id="upgradeFile" name="upgradeFile" value="Upload" onclick="ul.load()" /> 
<iframe id="upIFrame" name="upIFrame" src="#" style="display: none;"></iframe> 
</form> 

的ul.load()被調用低於該線並最終transfer.ajax代碼將調用

transfer.ajax({ 
       url:'upload.cgi', 
       data:{filename: ul.filename}, 
       success: success, 
       error: error, 
       async: true 
}); 

ul.filename來自uploadFileName

和所示transfer.ajax代碼低於

transfer = { 
ajax: function(p) {   
if (p.url.indexOf('/') == -1) { 
    p.url = '/cgi-bin/' + p.url; 
} 
p.type = 'POST'; 
p.contentType = 'application/json'; 
p.dataType = 'json'; 
p.cache = false; 

if (p.data != undefined) { 
    p.data = JSON.stringify(p.data); 
} 

$.ajax(p); 
} 
}; 

在Fire Fox中查看後的結果是 JSON

filename "file.tgz" 

來源

{"filename":"file.tgz"} 

一些能告訴我,我做錯了什麼或什麼,我錯過了什麼?

TIA

我修改了代碼以下...

var fd = new FormData(); 
fd.append("filename",ul.filename); 
$.ajax({ 
    url: "/cgi-bin/test.cgi", 
    type: "POST", 
    data: fd, 
    processData: false, // tell jQuery not to process the data 
    contentType: false, // tell jQuery not to set contentType 
    beforeSend : function(xhr){       
xhr.setRequestHeader('Content-Disposition', 'form-data; name=\"uploadFileName\"; filename=\"' + ul.filename + '\"'); 
}, 

});

,並請求頭中火福克斯作爲

Accept-Encoding gzip, deflate 
Accept-Language en-US,en;q=0.5 
Content-Disposition form-data; name="uploadFileName"; filename="test.tgz" 
Content-Length 157 
Content-Type multipart/form-data; boundary=---------------------------20025277823050 
X-Requested-With XMLHttpRequest 

但 「郵報」 顯示以下

來源 ---------------- ------------- 20025277823050內容處理:表單數據; NAME = 「文件名」

test.tgz ----------------------------- 20025277823050--

將如何我包含文件名=「test.tgz」?少了什麼東西?

TIA

+0

沒什麼特別的。只需要調用CGI來處理文件上傳並返回它是否成功 – user1964074

+0

那麼你剛剛上傳文件名,上傳一個實際的文件,你將不得不使用類似[FormData](https://開發人員。 mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects) – Musa

+0

我還需要爲onbeforesend函數添加xhr.setRequestHeader('Content-Disposition'...)嗎? – user1964074

回答

0

你可以試試這個,

 
var fd = new FormData(); 
fd.append("filename",ul.filename);`enter code here` 
$.ajax({ 
    url: "/cgi-bin/test.cgi", 
    type: "POST", 
    data: fd, 
    processData: false, 
    contentType: false, 
    beforeSend : function(xhr){       
xhr.setRequestHeader('Content-Disposition', 'form-data; name=\"' + ul.filename + '\"; filename=\"' + ul.filename + '\"'); 
} 
}); 

我認爲name屬性應該是作爲文件名。 謝謝:)。