我的NodeJS-Server接收到base64编码的图片.
data:image/jpeg;base64,/9j/4QCcRXhpZgAASUkqAAgAAAA ... CiiigD//Z
Run Code Online (Sandbox Code Playgroud)
收到的数据应保存为jpg.因此我使用Buffer和FileSystemWriter:
var imageBuffer = new Buffer(data, 'base64'); //console = <Buffer 75 ab 5a 8a ...
fs.writeFile("test.jpg", imageBuffer, function(err) { //... });
Run Code Online (Sandbox Code Playgroud)
fs.writeFile不会调用错误.保存了jpeg文件,但我无法打开它.Image-Viewer说:
File is damaged or too big.
Run Code Online (Sandbox Code Playgroud)
原始文件大6kb,新文件7kb.
目前,我正在使用@ google-cloud/storage NPM软件包将文件直接上传到Google云端存储分区.这需要一些技巧,因为我只有图像的base64编码字符串.我必须:
我想避免将文件存储在文件系统中,因为我使用的是Google App Engine,如果删除操作因任何原因无效,我不想重载文件系统/留下垃圾文件.这就是我的上传脚本现在的样子:
// Convert the base64 string back to an image to upload into the Google Cloud Storage bucket
var base64Img = require('base64-img');
var filePath = base64Img.imgSync(req.body.base64Image, 'user-uploads', 'image-name');
// Instantiate the GCP Storage instance
var gcs = require('@google-cloud/storage')(),
bucket = gcs.bucket('google-cloud-storage-bucket-name');
// Upload the image to the bucket
bucket.upload(__dirname.slice(0, -15) + filePath, {
destination: 'profile-images/576dba00c1346abe12fb502a-original.jpg',
public: true,
validation: 'md5'
}, function(error, file) {
if (error) {
sails.log.error(error);
}
return res.ok('Image …Run Code Online (Sandbox Code Playgroud) javascript node.js google-cloud-storage google-cloud-platform
我正在尝试学习nodejs,我认为最好的方法是尝试不使用express或任何其他非核心模块来做一些事情.我坚持试图获得一些文本和图像同时传递.我正在尝试的代码是:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, file) {
response.writeHead(200, {'content-type':'text/html'});
response.write('<p>hi there!</p>');
response.writeHead(200, {'content-type':'image/jpg'});
response.write(file, 'image');
response.end();
});
});
var port = process.env.PORT || 8080;
server.listen(port, function() {
console.log('Listening on port ' + port);
});
Run Code Online (Sandbox Code Playgroud)
理想情况下应该提供的是:
<html>
<body>
<p>hi there</p>
<img src='my_pic.jpg'/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但相反,什么都没有出现.
我试图把一个到Response.End()写"你好",这显示文本后,在那之后我试着换了文字和图片(包括标题),其显示的图像的地方,但我想不通如何同时显示两者,就像在真实的网页上一样.
你能解释一下如何将不同类型的内容放到同一个网页上 - 他们需要做出不同的回答吗?我在另一个问题上遇到的事情:
这样的东西看起来像解决方案,但我无法弄清楚如何将此应用于我的情况(我在服务器方面没有很多经验.)
非常感谢
编辑:从user568109的回复得到它:
var http = require('http');
var fs = require('fs');
var server = http.createServer(function(request,response) {
fs.readFile('my_pic.jpg', function(error, …Run Code Online (Sandbox Code Playgroud) 我正在为Android编写一个phonegap应用程序,我将base64 PNG字符串保存为文件.但是,我发现字符串只是转储到文件中,打开时无法将其视为图像.
我希望能够保存从base64字符串生成的图像.这就是我所拥有的:
Javascript(Formated for Phonegap):
/*** Saving The Pic ***/
var dataURL = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; //A simple red dot
function gotFS(fileSystem) {
fileSystem.root.getFile("dot.png", {create: true, exclusive: false}, gotFileEntry, fail);
}
function gotFileEntry(fileEntry) {
fileEntry.createWriter(gotFileWriter, fail);
}
function gotFileWriter(writer) {
writer.write(dataURL); //does not open as image
}
function fail(error) {
console.log(error.code);
}
Run Code Online (Sandbox Code Playgroud)
我尝试编辑代码只保存图像数据,但它也没有用.(见下文)
function gotFileWriter(writer) {
var justTheData = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");//Removes everything up to ...'base64,'
writer.write(justTheData); //also does not show
}
Run Code Online (Sandbox Code Playgroud)
触发everthing的HTML:
<p onclick="window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail)">Save a Dot</p>
Run Code Online (Sandbox Code Playgroud)
请帮忙.谢谢.
我正在使用loopback-component-storage将图像上传到服务器. https://docs.strongloop.com/display/public/LB/Storage+component
我还有AngularJS JavaScript SDK,所以我的lb-services.js是动态更新的. https://docs.strongloop.com/display/public/LB/AngularJS+JavaScript+SDK
现在我想在我的网页中显示来自此环回组件存储模型的照片,称为容器,因此我可以在我的角度控制器方法getFile(来自lb-service)中使用,其中"获取指定容器内指定文件的信息".像那样:
$scope smthing = Container.getFile({container: 'news-imgs', file: 'smallpic.pnh'})
或者我可以使用方法下载,即"在指定容器中下载文件".像那样:
$scope smthing = Container.download({container: 'news-imgs', file: 'smallpic.png'})
在我的控制器中.
现在,问题是,当我在.html文件中写入时{{smthing}},第一种方法将显示给我
{
"container": "news-imgs",
"name": "smallpic.png",
"size": 757,
"atime": "2015-12-01T11:49:36.840Z",
"mtime": "2015-12-01T11:49:36.840Z",
"ctime": "2015-12-01T11:49:36.840Z"
}
而第二种方法将显示如此多的悲伤迹象,如下所示:
"0":"?","1":"P","2":"N","3":"G","4":"\r","5":"\n","6":"\u001a","7":"\n","8":"\u0000","9":"\u0000","10":"\u0000","11":"\r","12":"I","13":"H","14":"D","15":"R","16":"\u0000","17":"\u0000","18":"\u0000","19":"\u0014","20":"\u0000","21":"\u0000","22":"\u0000","23":"\u0012","24":"\b","25":"\u0003","26":"\u0000","27":"\u0000","28":"\u0000","29":"l","30":"\u000e","31":"\u000e","32":"\"","33":"\u0000","34":"\u0000","35":"\u0000","36":"\u0019","37":"t","38":"E","39":"X","40":"t","41":"S","42":"o","43":"f","44":"t","45":"w","46":"a","47":"r","48":"e","49":"\u0000","50":"A","51":"d","52":"o","53":"b","54":"e","55":" ","56":"I","57":"m","58":"a","59":"g","60":"e","61":"R","62":"e","63":"a","64":"d","65":"y","66":"q","67":"?","68":"e","69":"<","70":"\u0000","71":"\u0000","72":"\u0001","73":"?","74":"P","75":"L","76":"T","77":"E","78":"?","79":"?","80":"?","81":"?","82":"?","83":"?","84":"?","85":"\u0000","86":"r","87":"?","88":"?","89":"?","90":"?","91":"\u0000","92":"?","93":"?","94":"\u0000","95":"~","96":"?","97":"?","98":"?","99":"?","100":"\u0000","101":"x","102":"?","103":"\u0012","104":"?","105":"?","106":"\u0000","107":"","108":"?","109":"\t","110":"?","111":"?","112":"\u0016","113":"{","114":"?","115":"\u0002","116":"?","117":"?","118":"(",...etc
我认为这是Image对象,但在json中,对吗?
我也试图抛出{{smthing}}来<img src="">标记,<img ng-src="">但它并没有工作过.
问题是:如何显示这张照片?请问有人可以帮助我吗?
问候,艾伦.
javascript ×4
node.js ×4
android ×1
angularjs ×1
base64 ×1
cordova ×1
loopbackjs ×1
strongloop ×1