0

我正在尝试使用 Imgur API 在我的网站上创建一个功能,当我写博客文章时,我可以将图像拖到其中<textarea>,然后将其上传到 Imgur,链接将插入到 textarea 中我。此功能利用了 HTML5 的 Draggable/Droppable 功能、新FileReader对象和 jQuery AJAX。

到目前为止,当我使用$.ajax()向 API 发送请求时,API 返回 400 错误,并显示消息“不支持文件类型或图像已损坏”。但是,我知道我的图像的文件类型是受支持的data/pngFileReader

$(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);
  }
});
4

1 回答 1

2

Imgur API 可能不接受 JSON 数据字符串;它可能只接受表单样式的 POST 数据有效负载,例如

image=fQas3r...&type=base64&title=Cats%20Forever

但你传递给它一个 JSON 字符串。

如果您将实际对象传递给 jQuery,jQuery 将自动格式化您的有效负载data,而不是 JSON 字符串:

var datObj = { image: event.target.result };
 $.ajax({
     type: "POST",
     data: datObj,
     ...

此外,由于您正在发送表单数据字符串,而不是 JSON,因此contentType请从您的 Ajax 请求中删除该参数。

于 2013-06-20T14:26:27.583 回答