Я хочу загрузить изображение в imgur, используя их API; с использованием javascript (node.js). Я всегда получаю в ответ:
{"data": {"error": "Формат изображения не поддерживается, или изображение повреждено.", "request": "/ 3 / upload", "method": "POST"}, "success": false, " status ": 400}
Вот код, который я написал:
ImgUrlHelper =
{
InitUploadValidateFile :function(element)
{
var file = element.value;
if(file === "")
return;
if(file != '')
{
var valid_extensions = /(.jpg|.jpeg|.gif|.png)$/i;
if(valid_extensions.test(file))
{
console.log("ok");
this.Upload(file);
}
else
console.log("notok");
}
else
console.log("notok");
},
Upload: function(file) {
var fd = new FormData();
fd.append("image", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://api.imgur.com/3/upload", true);
xhr.onload = this.OnLoad;
xhr.onerror = this.OnNetworkError;
xhr.onreadystatechange = this.OnReadyStateChange;
xhr.onprogress= this.OnProgress;
xhr.setRequestHeader('Authorization', 'Client-ID xxxxxxxxxxxx');
xhr.send(fd);
},
OnReadyStateChange:function(xhr){
if(xhr.readyState == 4 && xhr.status == 200)
{
var link = JSON.parse(xhr.responseText).data.link;
console.log(link);
}
if(xhr.status != 200)
{
console.log(xhr.status);
//log error
}
},
OnNetworkError:function(xhr)
{
//log error
console.log("network error while uploading.");
console.log(xhr);
},
OnProgress : function(e)
{
if (e.lengthComputable) {
var percentComplete = (e.loaded / e.total) * 100;
console.log(percentComplete + '% uploaded');
}
},
OnLoad : function(res) {
}
}
Я вызываю это, используя событие onchange для input type = "file":
onchange="ImgUrlHelper.InitUploadValidateFile(this)"
Я предполагаю, что есть проблема с чтением файла, который я выбрал с помощью элемента управления загрузкой файлов, здесь:
fd.append("image", file);
В этот момент файл содержит строку: «C: \ fakepath \ img.jpg». Может быть, мне действительно нужно кодировать изображение?