Javascript 使用ajax上传图像的GitHub API

Javascript 使用ajax上传图像的GitHub API,javascript,ajax,api,github,github-api,Javascript,Ajax,Api,Github,Github Api,我使用GitHub API和JS来创建一个小脚本#create,#Delete,#Edit 例如: 它可以很好地处理上传的文本文件 但问题是,我想上传一张图片,比如说,或者在Github上上传一段视频 当我上传图像时,它看起来像这样: �PNG IHDRHHU��G cHRMz&�����u0�`:�p��Q<bKGD�������tIME� /��p�IDATx�͜wx�E��?��rs��BK!���D���}�?�� ]uu��,��.�bߵ TT��CH��rs�

我使用GitHub API和JS来创建一个小脚本
#create
#Delete
#Edit

例如:

它可以很好地处理上传的文本文件 但问题是,我想上传一张图片,比如说,或者在Github上上传一段视频

当我上传图像时,它看起来像这样:

�PNG

IHDRHHU��G cHRMz&�����u0�`:�p��Q<bKGD�������tIME�   
/��p�IDATx�͜wx�E��?��rs��BK!���D���}�?��
]uu��,��.�bߵ
TT��CH��rs����ǽ� 

...
�巴布亚新几内亚

IHDRHHU��G cHRMz&�����u0�`:�P��问题是如何将图像编码到base64。在
readURL
函数中使用:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onloadend = function() {
      var base64result = reader.result.substr(reader.result.indexOf(',') + 1);
      createfile(input.files[0].name, "uploading a file", base64result)
    }
    reader.readAsDataURL(input.files[0]);
  }
}
这将使图像base64编码并使用解决方案从中剥离文件类型。完整代码:

const nameWithOwner='el3zahaby/testet';
const token='您的访问令牌';
功能手柄文件选择(evt){
readURL(evt.target);
}
document.getElementById('files').addEventListener('change',handleFileSelect,false);
函数readURL(输入){
if(input.files&&input.files[0]){
var reader=new FileReader();
reader.onloadend=函数(){
var base64result=reader.result.substr(reader.result.indexOf(',')+1);
createfile(input.files[0]。名称,“上载文件”,base64result)
}
reader.readAsDataURL(input.files[0]);
}
}
函数createfile(文件名、文件消息、文件内容){
var apirl=”https://api.github.com/repos/“+nameWithOwner+”/contents/“+fileName;
var filedata=JSON.stringify({
“消息”:fileMessage,
“内容”:文件内容
});
$.ajax({
url:apiurl,
键入:“PUT”,
发送前:函数(xhr){
setRequestHeader(“授权”、“令牌”+令牌);
},
数据:filedata
}).完成(功能(响应){
控制台日志(响应);
});
}


听起来像
标题
issuenope@Mr.x如果它的
标题
问题:它从未被发送过..请问有什么解决方案吗?@zahaby显示用于上传图像的代码,它为您提供了
文件内容
input@BertrandMartel我在更新1中添加了它。这非常有用,非常感谢,,,但我认为,如果我们将第15行替换为:
(/data:\w*\/\w*;base64,/gm,)
将是better@zahaby你说得对,我已经更新了关于这个问题的解决方案
function readURL(input) {
    if (input.files && input.files[0]) {
        //console.log(input.files[0].getAsBinary());
       // createfile(input.files[0].name,"uploading a file", input.files[0])


        var reader = new FileReader();
        reader.onload = function (e) {
            $('#falseinput').attr('src', e.target.result);
            $("#v1").html('<source src="'+ e.target.result +'" type="video/mp4"></source>' );

            $('#base').val(e.target.result);
            $('#base1').val(btoa(unescape(encodeURIComponent(reader.result))));
            var content = e.target.result;
            createfile(input.files[0].name,"uploading a file", unescape(encodeURIComponent(content)))
        };
        if (allow.binary.indexOf(input.files[0].type) === -1) {
                alert(input.files[0].type);
                reader.readAsText(input.files[0],"UTF-8");
            }else{
                reader.readAsDataURL(input.files[0]);
            }
    } 
}
function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onloadend = function() {
      var base64result = reader.result.substr(reader.result.indexOf(',') + 1);
      createfile(input.files[0].name, "uploading a file", base64result)
    }
    reader.readAsDataURL(input.files[0]);
  }
}