我正在尝试从用户的计算机上传图片。首先,我将图像作为二进制字符串读取,然后在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