[MONGODB] 표현 GridFS에서 POST 요청에서 데이터 스트림을 저장, MongoDB를, Node.js를
MONGODB표현 GridFS에서 POST 요청에서 데이터 스트림을 저장, MongoDB를, Node.js를
내가 먼저 임시 파일로 서버에 어디를 저장하지 않고 GridFS에 직접 이미지를 게시 할 수있는 방법을 알아 내려고 노력하고있다.
(. 크롬 내선) I는 파일을 게시 할 우체부를 사용하고 있는데 사용하여 파일이 게시물을 저장 관리 :
req.pipe(fs.createWriteStream('./test.png'));
readStream가 서버에있는 파일을 생성 할 때 나는 또한 readStream에서 GridFS에 직접 저장할 수입니다. (참조 코드)
나는 POST를 수신하고 기본적으로 단지 savePic.js에게이 전달 다음 파일, saveFromReq.js 있습니다.
saveFromReq.js :
var express = require('express');
var app = express();
var savePic = require('./savePic');
var fs = require('fs');
var GridStore = require('mongodb').GridStore;
var pic = './square.png';
var picID;
//When the following
//var pic = fs.createReadStream('./square.png', {autoClose: true});
//is not commented out, and 'req' is replaced with 'pic' in the savePic function,
//the file square.png is stored correctly to GridFS
app.post('/picture', function(req, res){
savePic(req, function(id){});
res.writeHead(200, {'Content-Type': 'text' });
res.end("Sucsess!\n");
});
app.listen(process.env.PORT || 3413);
savePic.js :
var savePic = function(req, callback){
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
ReplSetServers = require('mongodb').ReplSetServers,
ObjectID = require('mongodb').ObjectID,
Binary = require('mongodb').Binary,
GridStore = require('mongodb').GridStore,
Grid = require('mongodb').Grid,
Code = require('mongodb').Code,
BSON = require('mongodb').pure().BSON,
assert = require('assert');
fs = require('fs');
//When the following
//req.pipe(fs.createWriteStream('./test.png'));
//is not commented out, the correct image is stored to test.png, and
//the sequence after req.on("data"... starts
//(That sequence does not start at all when this is commented out..)
var fileId = new ObjectID();
var db = new Db('testDB', new Server('localhost', 27017));
// Establish connection to db
db.open(function(err, db) {
var gridStore = new GridStore(db, 'test', 'w');
//open
gridStore.open(function(err, gridStore) {
console.log("opened");
req.on("data", function (data) {
console.log("data recieved");
gridStore.write(data, function (err, gridStore) {
if (err) {
console.log("error writing file");
}
});
});
req.on("end", function () {
gridStore.close(function (err, gridStore) {
if (!err) {
console.log("The file has been stored to database.");
db.close();
}
});
});
req.pipe(gridStore);
});
});
callback(fileId);
};
module.exports = savePic;
어떤 도움을 주시면 감사하겠습니다!
해결법
-
==============================
1.gridfs 스트림은 매우 간단합니다 :
gridfs 스트림은 매우 간단합니다 :
// `gfs` is a gridfs-stream instance app.post('/picture', function(req, res) { req.pipe(gfs.createWriteStream({ filename: 'test' })); res.send("Success!"); });
-
==============================
2.@의 robertklep의 대답은 정확하지만, 나는 그의 대답에 뭔가를 추가하고 싶습니다. 당신이 저장된 파일의 메타 데이터를 다시 보낼 수있는 방법이 코드를 보여줍니다.
@의 robertklep의 대답은 정확하지만, 나는 그의 대답에 뭔가를 추가하고 싶습니다. 당신이 저장된 파일의 메타 데이터를 다시 보낼 수있는 방법이 코드를 보여줍니다.
app.post('/picture', function(req, res) { req.pipe(gfs.createWriteStream({ filename: 'test' }).on('close', function(savedFile){ console.log('file saved', savedFile); return res.json({file: savedFile}); })); })
-
==============================
3.이 몽구스와 나를 위해 일한 :
이 몽구스와 나를 위해 일한 :
var gfs = Grid(mongoose.connection.db, mongoose.mongo); var writeStream = gfs.createWriteStream({ filename: name, mode: 'w', content_type: 'video/mp4' }); writeStream.on('close', function() { console.log('close event'); }); fs.createReadStream('uploads/' + name + '/' + name + '.mp4').pipe(writeStream); console.log('stream.write: ' + name + '/' + name + '.mp4');
나는 클라이언트 측 브라우저에서 비디오를 얻기로 며칠을 고민하고있다. 그게 내가 지금까지 뭘하려 :
var readstream = gfs.createReadStream({ filename: file.filename }); readstream.on('data', function(data) { res.write(data); console.log(data); }); readstream.on('end', function() { res.end(); }); readstream.on('error', function (err) { console.log('An error occurred!', err); throw err; });
MongoDB의 측면 모습 등에 내 데이터 :
그리고 contentType이는 '비디오 / MP4'는 것입니다 :
브라우저 측 로깅이 인쇄 :
개체 {0 ","1 ","2 ","3 ","4 "F", 5 : "t", 6 "Y"7 "P", 8 "I", 9 : "S", 85003 더 ...}
누군가가 내 라이브 저장시겠습니까? 나는 당신이이 곳에서 편리하지로 내 게시물을 볼 수 없습니다 바랍니다.
-
==============================
4.전체 코드는`잘 nodejs.This에 gridfs를 사용하여 MongoDB의 txtfile을 작품 삽입
전체 코드는`잘 nodejs.This에 gridfs를 사용하여 MongoDB의 txtfile을 작품 삽입
var에 몽구스 =은 ( "몽구스")을 필요로; var에 gridfsstream의 =은 ( "gridfsstream")을 필요로; var에 FS는 = ( "FS")을 필요로; mongoose.connect ( "MongoDB를 : // 로컬 호스트 : 27017 / testimage"); VAR CONN = mongoose.connection; gridfsstream.mongo = mongoose.mongo; conn.once ( "개방"함수 () { CONSOLE.LOG는 ( "데이터베이스가 성공적으로 연결"); VAR GFS = gridfsstream (conn.db); VAR writestream = gfs.createWriteStream ({ 파일 이름 : "danger.txt" }); fs.createReadStream ( "sivakasi.txt") 파이프 (writestream).; writestream.on ( "가까운", 기능 (파일) { 을 console.log ( "gridfs를 사용하여 MongoDB에 성공적으로 저장"file.filename +); }); writestream.on ( "오류", 기능 (파일) { CONSOLE.LOG은 (는 file.filename + "를 사용하여 MongoDB gridfs에 저장되지 않은"); }); }); conn.on ( "오류"함수 () { 을 console.log ( "데이터베이스를 다시 시도 연결되지!"); });
`
-
==============================
5.전체 코드는 nodejs는 server.This 코드의 이미지가 잘 작동하는지 gridfs 시스템과 디스플레이를 사용하여 MongoDB에서 해당 이미지를 저장 HTML에서 이미지를 게시 할 수 있습니다.
전체 코드는 nodejs는 server.This 코드의 이미지가 잘 작동하는지 gridfs 시스템과 디스플레이를 사용하여 MongoDB에서 해당 이미지를 저장 HTML에서 이미지를 게시 할 수 있습니다.
var에 급행 =은 ( "표현")이 필요합니다; var에 bodyparser의 =은 ( "bodyparser")을 필요로; var에 multer의 =은 ( "multer")을 필요로; var에 응용 프로그램 =)은 (표현; VAR 업로드 = multer ({대상 : '/ tmp를 /'}); app.use (bodyparser.urlencoded ({확장 : FALSE})); app.post ( "/ uploadimage"upload.single ( "파일") 함수 (요청, 응답) { var에 몽구스 =은 ( "몽구스")을 필요로; var에 gridfsstream의 =은 ( "gridfsstream")을 필요로; var에 FS는 = ( "FS")을 필요로; mongoose.connect ( "MongoDB를 : // 로컬 호스트 : 27017 / testimage"); VAR 콘 = mongoose.connection; gridfsstream.mongo = mongoose.mongo; con.once ( "개방"함수 () { CONSOLE.LOG는 ( "테스트 이미지 데이터베이스가 성공적으로 연결"); VAR GFS = gridfsstream (con.db); VAR readstream = fs.createReadStream (request.file.originalname); VAR writestream = gfs.createWriteStream ({ 파일 이름 : "mentorpicthree.jpg" }); readstream.pipe (writestream); writestream.on ( "닫기"함수 () { 을 console.log ( "이미지를 성공적으로 MongoDB를 데이터베이스에 저장"); fs.readFile (request.file.originalname 함수 (ERR, 데이터) { 경우 (ERR) { response.writeHead (404, { "Content-Type을": "텍스트 / 일반"}); ( "오류") CONSOLE.LOG; } 그밖에 { response.writeHead (200, { "Content-Type을": "이미지 / JPG"}); 을 Response.End (데이터); } }); }); writestream.on ( "오류"함수 () { CONSOLE.LOG는 ( "이미지가 MongoDB를 데이터베이스에 저장되지"); }); }); con.on ( "오류"함수 () { 을 console.log ( "데이터베이스를 다시 시도 연결되지!"); }); }); app.listen (8086, 함수 () { 을 console.log ( "서버 포트 8086에서 실행"); });
파일 업로드 TITLE> head> 라이언 Dhal p>
from https://stackoverflow.com/questions/20860005/storing-data-stream-from-post-request-in-gridfs-express-mongodb-node-js by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 몽구스 모델에서 스키마 특성을 받고 (0) | 2019.12.14 |
---|---|
[MONGODB] MongoDB의 검색을 사용하여 자동 완성 기능을 구현 (0) | 2019.12.14 |
[MONGODB] 집계 쿼리에 MongoDB의 성능 (0) | 2019.12.14 |
[MONGODB] MongoDB의 자바 드라이버 구성 로깅 (0) | 2019.12.14 |
[MONGODB] MongoDB의 컬렉션 중복 문서의 삽입을 중지하는 방법 (0) | 2019.12.14 |