source upload
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
unit RESTServerClass;
|
||||
|
||||
{$I Synopse.inc} // define HASINLINE and some FPC-specific options
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
SysUtils,
|
||||
Classes,
|
||||
SynCommons,
|
||||
SynLog,
|
||||
mORMot,
|
||||
RESTData;
|
||||
|
||||
type
|
||||
ENoteServer = class(EORMException);
|
||||
|
||||
TNoteServer = class(TSQLRestServerFullMemory)
|
||||
protected
|
||||
fRootFolder: TFileName;
|
||||
fBlobFolder: TFileName;
|
||||
public
|
||||
constructor Create(const aRootFolder: TFileName; const aRootURI: RawUTF8); reintroduce;
|
||||
destructor Destroy; override;
|
||||
property RootFolder: TFileName read fRootFolder;
|
||||
published
|
||||
procedure Blob(Ctxt: TSQLRestServerURIContext);
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
|
||||
|
||||
{ TNoteServer }
|
||||
|
||||
constructor TNoteServer.Create(const aRootFolder: TFileName;
|
||||
const aRootURI: RawUTF8);
|
||||
begin
|
||||
fRootFolder := EnsureDirectoryExists(ExpandFileName(aRootFolder),true);
|
||||
fBlobFolder := EnsureDirectoryExists(fRootFolder+'blob\',true);
|
||||
// define the log level
|
||||
with TSQLLog.Family do begin
|
||||
Level := LOG_VERBOSE; // LOG_STACKTRACE;
|
||||
DestinationPath := fRootFolder+'..\log\';
|
||||
if not FileExists(DestinationPath) then
|
||||
CreateDir(DestinationPath);
|
||||
PerThreadLog := ptIdentifiedInOnFile;
|
||||
end;
|
||||
// prepare the server in-memory storage
|
||||
inherited Create(DataModel(aRootURI),fRootFolder+'data.json',false,false);
|
||||
UpdateToFile;
|
||||
end;
|
||||
|
||||
destructor TNoteServer.Destroy;
|
||||
begin
|
||||
inherited;
|
||||
fModel.Free;
|
||||
end;
|
||||
|
||||
procedure TNoteServer.Blob(Ctxt: TSQLRestServerURIContext);
|
||||
var FileName: TFileName;
|
||||
begin
|
||||
if (Ctxt.Table=TSQLNoteFile) and (Ctxt.TableID<>0) then begin
|
||||
FileName := fBlobFolder+UTF8ToString(
|
||||
OneFieldValue(TSQLNoteFile,'FileName',Ctxt.TableID));
|
||||
case Ctxt.Method of
|
||||
mGET:
|
||||
Ctxt.ReturnFile(FileName);
|
||||
mPOST,mPUT: begin
|
||||
FileFromString(Ctxt.Call.InBody,FileName);
|
||||
Ctxt.Success;
|
||||
end;
|
||||
mDELETE:
|
||||
if DeleteFile(FileName) then
|
||||
Ctxt.Success else
|
||||
Ctxt.Error('',HTTP_NOTFOUND);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
end.
|
Reference in New Issue
Block a user