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" >
<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
沒什麼特別的。只需要調用CGI來處理文件上傳並返回它是否成功 – user1964074
那麼你剛剛上傳文件名,上傳一個實際的文件,你將不得不使用類似[FormData](https://開發人員。 mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objects) – Musa
我還需要爲onbeforesend函數添加xhr.setRequestHeader('Content-Disposition'...)嗎? – user1964074