我有一个web服务调用将返回一个图像,现在我想将这个图像保存到服务器中的文件系统。如何保存web服务返回的图像?
问题是,我无法从服务器进行web服务调用,因为web服务应用程序在每个用户机器上运行,并且请求的服务为http://localhost/get_image
,该服务返回图像。
如何将该图像保存在服务器上?
我有一个web服务调用将返回一个图像,现在我想将这个图像保存到服务器中的文件系统。如何保存web服务返回的图像?
问题是,我无法从服务器进行web服务调用,因为web服务应用程序在每个用户机器上运行,并且请求的服务为http://localhost/get_image
,该服务返回图像。
如何将该图像保存在服务器上?
您可以使用HTML5使用JavaScript加载图像,并将base64编码响应发送到服务器,您可以在其中解码响应并将图像写入文件。下面是该方法
确保webservice响应头包含允许跨源资源共享的“Access-Control-Allow-Origin:*”
jQuery代码
var myCanvas = document.getElementById('canvasId'); var ctx = myCanvas.getContext('2d'); var img = new Image; img.crossOrigin = 'anonymous'; img.src = "web service url which returns image"; img.onload = function(){ console.log(img.width, img.height); // set canvas height and width to image height and width else only part of image will get created myCanvas.height = img.height; myCanvas.width = img.width; ctx.drawImage(img,0,0); // Or at whatever offset you like var dataURL = myCanvas.toDataURL("image/png"); dataURL = dataURL.replace(/^data:image\/(png|jpg);base64,/, ""); $('#some_text_area_id').val(dataURL); // set the response in text area $('#form_id').submit(); // submit the form };
File.open('test.png',"wb") do |file| file.write(Base64.decode64(params[:text_area])) end
我更喜欢使用URL图像carrierwave宝石上传
http://railscasts.com/episodes/253-carrierwave-file-uploads?autoplay=true
携带波可以选择使用图像url上传文件,但问题在于图像url会比如http:// localhost:8080/image,因为图片是从客户端计算机的webservice请求中获取的 因此服务器不会获得任何图片 – rrd 2012-01-17 12:26:57
如所建议的上述base64编码通过有线传输图像时,应使用。 Base64以ASCII字符串格式表示二进制数据。它专门用于MIME内容传输编码并将复杂数据存储在XML中。
你可以试试这里的Javascript base64编码解码http://rumkin.com/tools/compression/base64.php
此外,请确保您使用file.write和file.read代替file.puts和file.gets当你尝试写PNG图像文件
File.open('a.png', 'rb') do |infile|
File.open('b.png', 'wb') do |outfile|
outfile.write(infile.read)
end
end
尽管最好的解决方案是将图像URL作为Web服务响应返回,并从资产服务器获取图像。
BASE64编码它,POST到服务器并保存在那里。 – 2012-01-17 10:56:39
我正在尝试的是 $ .ajax({url:'http:// localhost:8080/image',success:function(msg){$('#some_field').val(Base64.encode(msg) ); $('#nuser')。submit();}}); 但系统在线上挂起Base64.encode – rrd 2012-01-17 11:06:17
Base64可能未定义(它不是核心JS对象)。尝试下载一个JavaScript base64编码库(http://code.google.nl/)。com/p/stringencoders/source/browse/trunk/javascript/base64.js?r = 210) – 2012-01-17 12:16:37