我有一个将返回图像的webservice调用,现在我想将此图像保存到服务器中的文件系统。
问题是,我无法从服务器进行webservice调用,因为webservice应用程序在每台用户计算机上运行,并且以http://localhost/get_image
的形式向服务发出请求,返回图像。
如何在服务器上保存此图像?
答案 0 :(得分:4)
您可以使用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
答案 1 :(得分:0)
我更喜欢使用carrierwave gem进行网址上传
http://railscasts.com/episodes/253-carrierwave-file-uploads?autoplay=true
答案 2 :(得分:0)
如上所述,在通过网络传输图像时应使用base64编码。 Base64表示ASCII字符串格式的二进制数据。它专门用于MIME内容传输编码和以XML格式存储复杂数据。
您可以在http://rumkin.com/tools/compression/base64.php
尝试Javascript base64编码解码此外,当您尝试编写png图像文件时,请确保使用file.write和file.read而不是file.puts和file.gets
File.open('a.png', 'rb') do |infile|
File.open('b.png', 'wb') do |outfile|
outfile.write(infile.read)
end
end
虽然最佳解决方案是将图片URL作为Web服务响应返回,然后从资产服务器获取图像。