jQuery - 获取图像 url/link/path 从客户端上传图像到 imgur

jQuery - Getting Image url/link/path to upload image on imgur from client side

我正在尝试将客户端通过文件浏览器选择的图像上传到 imgur.com,但问题是我怎样才能让 url 将图像上传到 imgur,因为我们需要 url上传图片。

我的代码可以很好地处理网络上已有的图像,例如 http://cdn.sstatic.net/stackexchange/img/logos/so/so-logo.png

这是 css 代码 -

<input id="filebrow" type="file" accept="image/*" style="visibility:hidden" />

这是通过按钮触发的 jQuery 代码 -

$('#filebrow').change(function(event) {
    var clientId = "CLIENT ID HERE";
    var imgUrl = "";//HOW to get url of selected file here??           
    $.ajax({
    url: "https://api.imgur.com/3/upload",
    type: "POST",
    datatype: "json",
    data: {image: imgUrl},
    success: fdone,
    error: function(){alert("failed")},
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "Client-ID " + clientId);
    }
});
});

function fdone(dataa)//called on ajax success 
{
     alert("Link :"+dataa.data.link);
}

如果在 var imgUrl 中输入一张已上传图片的图片 url 它工作正常,但我想上传用户通过文件浏览器选择的图片。

我说:

  1. 你需要阅读源代码

例如,使用 new FileReader() (JS)

  1. 将源添加到变量 imgUrl

我的愿景:) :

<html>
    <head>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
        <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
        <script src="http://code.jquery.com/ui/1.11.3/jquery-ui.js"></script>
    </head>
    <body>
        <script>
            function PreviewImage() {
            var oFReader = new FileReader();
            oFReader.readAsDataURL(document.getElementById("uploadImage").files[0]);
            oFReader.onload = function (oFREvent) {
                var sizef = document.getElementById('uploadImage').files[0].size;
                document.getElementById("uploadPreview").src = oFREvent.target.result;
                document.getElementById("uploadImageValue").value = oFREvent.target.result; 
            };
        };
        jQuery(document).ready(function(){
            $('#viewSource').click(function ()
            {
                var imgUrl = $('#uploadImageValue').val();
                alert(imgUrl);
            });
        });
        </script>
        <div>
            <input type="hidden" id="uploadImageValue" name="uploadImageValue" value="" />
            <img id="uploadPreview" style="width: 150px; height: 150px;" /><br />
            <input id="uploadImage" style="width:120px" type="file" size="10" accept="image/jpeg,image/gif, image/png" name="myPhoto" onchange="PreviewImage();" />
        </div>
        <a href="#" id="viewSource">Source file</a>
    </body>
</html>

看到websky的回答后,我做了一些研究,找到了答案。 他漏掉了分隔 url 的一行。 所以这是我使用的并且有效的简化代码:-

$('#filebrow').change(function() {
   var reader = new FileReader();
   reader.onload = function(e) {
   //this next line separates url from data
   var iurl = e.target.result.substr(e.target.result.indexOf(",") + 1, e.target.result.length);
   var clientId = "CLIENT ID HERE";               
   $.ajax({
    url: "https://api.imgur.com/3/upload",
    type: "POST",
    datatype: "json",
    data: {
    'image': iurl,
    'type': 'base64'
    },
    success: fdone,//calling function which displays url
    error: function(){alert("failed")},
    beforeSend: function (xhr) {
        xhr.setRequestHeader("Authorization", "Client-ID " + clientId);
    }
});
};
 reader.readAsDataURL(this.files[0]);
});

上传后显示 URL 图片 -

function fdone(data) //this function is called on success from ajax
{
   alert(data.data.link);     
}

感谢 websky 他的回答帮助我找到了解决方案。

看完websky的回答后。我可以成功上传到 Imgur!谢谢 :) 所以我想为所有在将图片上传到 Imgur 时遇到问题的人总结一下

  1. 你需要准备base64编码的图片(请看websky的回答)
  2. 使用“substr”函数仅从 base64 获取数据部分
  3. 准备好你的 ajax 并像这样发布到 Imgur

var base64 = base64.substr(base64.indexOf(",") + 1, base64.length);
$.ajax({ 
      url: 'https://api.imgur.com/3/image',
      type: 'POST',
      datatype: 'json',
      data: {
        'image': base64
      },
      beforeSend:function(xhr){
            xhr.setRequestHeader("Authorization", "Client-ID " + clientId);
      },
      success: function(response){
            console.log(response);
      }
})

希望对您有所帮助:)

你应该使用 CURL 来使用 imgur api 上传图片。这将 return 你用 JS 编码的信息。您可以轻松检索 URL 从那里开始。