我試圖使用Imgur API在我的網站上創建一個功能,當我寫博客文章時,我可以將圖像拖入<textarea>
,它會上傳到Imgur,鏈接將插入到我的textarea。此功能利用HTML5的可拖拽/放置功能,新的FileReader
對象和jQuery AJAX。Ajax API請求返回400與base64圖像數據
到目前爲止,當我使用$.ajax()
向API發送請求時,API返回400錯誤,並顯示消息「文件類型不受支持或圖像已損壞」。但是,我知道我的映像的文件類型受支持(data/png
),並且由FileReader
生成的數據沒有損壞,因爲我可以將數據粘貼到我的URL欄並獲取我插入的圖片。
$(document).ready(function(e) {
var area = document.getElementById('post_body');
function readFiles(files) {
console.log("readfiles called! files: ");
console.log(files);
var fr = new FileReader();
fr.onload = function(event) {
console.log(event);
var dat = "{image:'"+event.target.result+"'}";
console.log(dat);
$.ajax({
type:"POST",
data:dat,
url:'https://api.imgur.com/3/image',
headers: {
Authorization: "Client-ID CLIENT-ID-WAS-HERE"
},
contentType: "text/json; charset=utf-8",
dataType: "json",
success:function(msg) {
console.log(msg);
area.innerHTML += msg.data;
},
error:function(errormsg) {
console.log(errormsg);
alert("Sorry, there was an error uploading the image." + errormsg.responseText);
}
});
}
fr.readAsDataURL(files[0]);
}
area.ondragover = function(e) {
e.preventDefault();
console.log("ondragover fired!");
$(this).addClass('hover');
}
area.ondragend = function(e) {
e.preventDefault();
console.log("ondragend fired!");
$(this).removeClass('hover');
}
area.ondrop = function(e) {
console.log("ondrop fired!!");
if ($(this).hasClass('hover')) $(this).removeClass('hover')
e.preventDefault();
readFiles(e.dataTransfer.files);
}
});
根據[Imgur API](http://api.imgur.com/endpoints/image#image-upload),您可以選擇設置'type'參數。既然你沒有設置'type',或許你的上傳被誤讀爲二進制數據?或者它可能被誤認爲原始的base64數據(它不是 - 它是以'data:data/png; base64'開頭的base64數據)。唯一的另一個'type'選項是URL,它看起來像它的mabe應該工作,但是當我們告訴它需要一個URL時,我不會依賴Imgur API來理解'data' URI。 – apsillers
@apsillers將'type:'base64''添加到dat變量仍會返回一個400,與將event.target.result中的'data:data/png; base64'切片一樣。 – Polyov