3

我正在尝试调用我的自定义 api,它使用回形针上传文件,它在本地使用https://github.com/jwagener/httmultiparty可以正常工作,但是当我尝试调用 api 并为 heroku 部署的应用程序上传文件时,出现以下错误发生。

NoMethodError: undefined method `bytesize' for #<Array:0x00000006e71980>
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1735:in `send_request_with_body'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1724:in `exec'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1189:in `transport_request'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1177:in `request'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/rest-client-1.6.7/lib/restclient/net_http_ext.rb:51:in `request'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1170:in `block in request'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:627:in `start'
    from /home/umair/.rvm/rubies/ruby-1.9.2-p320/lib/ruby/1.9.1/net/http.rb:1168:in `request'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/rest-client-1.6.7/lib/restclient/net_http_ext.rb:51:in `request'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/httparty-0.8.3/lib/httparty/request.rb:76:in `perform'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/httparty-0.8.3/lib/httparty/request.rb:208:in `handle_response'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/httparty-0.8.3/lib/httparty/request.rb:90:in `perform'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/httparty-0.8.3/lib/httparty.rb:400:in `perform_request'
    from /home/umair/Projects/core/lib/httmultiparty.rb:81:in `post'
    from (irb):5
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/railties-3.0.7/lib/rails/commands/console.rb:44:in `start'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/railties-3.0.7/lib/rails/commands/console.rb:8:in `start'
    from /home/umair/.rvm/gems/ruby-1.9.2-p320@gm/gems/railties-3.0.7/lib/rails/commands.rb:23:in `<top (required)>'

我在 ruby​​ 控制台上运行它来测试文件上传 api。

HttpClient.post('/storage.xml',:basic_auth=>   {:username=>'badde88248834bec759d94563f102d52e19702fa',:password=>'b890b48e2769192372bf531fc46827cd86bea23f'} ,:query => {:auth_token=> '1045aa26cda23f5f3aec737a45e7ba0017c1a7cf',:user_file => File.new( '/home/umair/Login.png')})

three.js:将坐标从相机空间转换到场景空间

我试图相对于相机放置一个立方体,而不是相对于场景。问题是,要将它放置在场景中(我必须让它显示),我必须知道对应于立方体相机空间坐标的场景坐标。我在 THREE.Camera 中找到了这个函数“projectionMatrixInverse”。它有一个很好的函数,叫做“multiplyVector3”,我希望它能让我将向量 (1,1,1) 转换回场景空间,如下所示:

var camera, myvec, multvec; // (and others)
camera = new THREE.OrthographicCamera( window.innerWidth / - 2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / - 2, - 2000, 1000 );
camera.position.x = 200;
camera.position.y = 100;
camera.position.z = 200;

myvec = new THREE.Vector3(1,1,1);
console.log("myvec: ", myvec);
multvec = camera.projectionMatrixInverse.multiplyVector3(THREE.Vector3(1,1,1));
console.log("multvec: ", multvec);

问题是,在控制台上我得到:

myvec: Object { x=1, y=1, z=1}
TypeError: v is undefined
var vx = v.x, vy = v.y, vz = v.z;

multiplyVector3 根本不接受 my myvec,或者说它是未定义的,即使控制台说它是一个对象。我不明白。

4

1 回答 1

0

我遇到了同样的问题,找不到解决方案。现在我正在这样做,它只需要multipart-post宝石。

class Client
  require 'net/http/post/multipart'

  def self.perform inputurl, file
    url = URI.parse(inputurl)
    File.open(file) do |transfile|
      Net::HTTP.start(url.host, url.port) do |http|
        req = Net::HTTP::Post::Multipart.new(
          url.path,
          file1: UploadIO.new(transfile, "multipart/formdata", File.basename(file)),
        )
        response = http.request(req)
      end
    end
  end
end
于 2013-03-22T19:41:02.663 回答