如何使用HTTP POST在JSON中将图像作为base64字符串发送?

时间:2014-01-11 19:23:05

标签: javascript json image post base64

我正在尝试从用户的计算机上传图片。首先,我将图像作为二进制字符串读取,然后在base64中对其进行编码,然后将其作为JSON对象的一部分进行POST。但是,我收到HTTP 500错误,我不明白为什么。我尝试用硬编码的短字符串替换reader.result并且它有效(我有一个HTTP 200)。所以我不确定字符串长度(对于图像二进制字符串来说非常长)是否是这里的主要因素。如果重要的话,发送和接收POST的域是不同的。这可能有什么问题?提前谢谢。

错误讯息:

  

[2014-01-11 14:23:58] INFO WEBrick :: HTTPServer #start:pid = 77263   端口= 9292   127.0.0.1 - - [11 / Jan / 2014 14:24:37]“POST / pull_request HTTP / 1.1”500 185316 0.0413

客户端代码:

if(image && image.type.match(imageType)) {
    var fileName = timestamp+'-'+image.name;
    var reader = new FileReader();
    reader.onload = function(e) {
        write('images/'+fileName, Base64.encode(reader.result), 'base64');
    };
    reader.readAsBinaryString(image);
}

function write(path, content, encoding){
    var request = {"request":{"path": path, "content": content, "encoding": encoding}};
    $.ajax({
        type: "POST",
        url: "http://localhost:9292/upload",
        data: JSON.stringify(request)
    });

}

服务器端代码。为了简单起见,我删除了JSON解析和上传内容,因为目前我只想在收到POST时获得HTTP 200,无论数据内容如何:

require 'sinatra'
require 'json/ext' # required for .to_json
require 'github_api'

configure do
    username = ENV['GITHUB_USER'] || 'username'
    password = ENV['GITHUB_PASSWORD'] || 'password'
    github_login = "%s:%s"  % [username, password]
    github = Github.new basic_auth: github_login
    set :github, github
    set :user_name, 'someusername'
    set :repo, 'somerepo'
end

post "/request" do
    status 200
end

0 个答案:

没有答案