summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorEliot Horowitz <eliot@10gen.com>2009-02-02 17:19:55 -0500
committerEliot Horowitz <eliot@10gen.com>2009-02-02 17:19:55 -0500
commit288d83370d59ed8fade6d7c641ed07c038608a9c (patch)
treeae48878f5d9578389c195d9ebe0325a13de7979a /tools
parent3bba95ecee83f5edaf0b3e1f16ed1e533517ddf6 (diff)
downloadmongo-288d83370d59ed8fade6d7c641ed07c038608a9c.tar.gz
gridfs and some tools
Diffstat (limited to 'tools')
-rw-r--r--tools/files.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/tools/files.cpp b/tools/files.cpp
new file mode 100644
index 00000000000..f4aa1e457ff
--- /dev/null
+++ b/tools/files.cpp
@@ -0,0 +1,99 @@
+// files.cpp
+
+/**
+* Copyright (C) 2008 10gen Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License, version 3,
+* as published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "stdafx.h"
+#include "client/gridfs.h"
+#include "client/dbclient.h"
+
+#include "Tool.h"
+
+#include <fstream>
+#include <iostream>
+
+#include <boost/program_options.hpp>
+
+using namespace mongo;
+
+namespace po = boost::program_options;
+
+class Files : public Tool {
+public:
+ Files() : Tool( "files" ){
+ add_options()
+ ( "command" , po::value<string>() , "command (list|put|get)" )
+ ( "file" , po::value<string>() , "filename for get|put" )
+ ;
+ addPositionArg( "command" , 1 );
+ addPositionArg( "file" , 2 );
+ }
+
+ int run(){
+ string cmd = getParam( "command" );
+ if ( cmd.size() == 0 ){
+ cerr << "need command" << endl;
+ return -1;
+ }
+
+ GridFS g( _conn , _db );
+
+ if ( cmd == "list" ){
+ auto_ptr<DBClientCursor> c = g.list();
+ while ( c->more() ){
+ BSONObj obj = c->next();
+ cout
+ << obj["filename"].str() << "\t"
+ << (long)obj["length"].number()
+ << endl;
+ }
+ return 0;
+ }
+
+ string filename = getParam( "file" );
+ if ( filename.size() == 0 ){
+ cerr << "need a filename" << endl;
+ return -1;
+ }
+
+ if ( cmd == "get" ){
+ GridFile f = g.findFile( filename );
+ if ( ! f.exists() ){
+ cerr << "file not found" << endl;
+ return -2;
+ }
+
+ string out = f.getFilename();
+ f.write( out );
+ cout << "done write to: " << out << endl;
+ return 0;
+ }
+
+ if ( cmd == "put" ){
+ g.storeFile( filename );
+ cout << "done!";
+ return 0;
+ }
+
+ cerr << "unknown command: " << cmd << endl;
+ return -1;
+ }
+};
+
+int main( int argc , char ** argv ) {
+ Files f;
+ return f.main( argc , argv );
+}