1,通过Stream实现文件上传与下载:首先在服务端建立相关路径信息。
【文件上传接口:FileUpLoad】范例代码如下:
var
memoryStream: TMemoryStream;
sErrorMsg, filePath,fileName: string;
token,FolderNo: string;
begin
if OpenDialog1.Execute = false then
Exit;
//待上传的文件
filePath := OpenDialog1.fileName;
memoryStream := TMemoryStream.Create;
try
screen.Cursor := crHourGlass;
try
//调用此接口的秘钥
token:='123';
//服务端定义的文件夹序号
FolderNo:= 'k01';
//文件名称
fileName:=ExtractFileName(fileName);
//文件转Stream
memoryStream.LoadFromFile(filePath);
memoryStream.Position := 0;
//执行失败返回的错误代码
sErrorMsg:='';
if not ser.FileUpLoad(fileName,FolderNo,token, memoryStream, sErrorMsg) then
begin
showmessage(sErrorMsg);
Exit;
end;
showmessage('保存成功')
except on ee: exception do
begin
showmessage(ee.Message)
end;
end;
finally
screen.Cursor := crDefault;
memoryStream := nil;
end;
【文件下载接口:FileDownLoad】范例代码如下:
const
BufSize = $F000;
var
Stream: TStream;
sErrorMsg, netfileName, savefileName: string;
token, FolderNo: string;
Buffer: TBytes;
ReadCount: Integer;
FS: TMemoryStream;
begin
if SaveDialog1.Execute = false then
Exit;
// 保存路径及名称
savefileName := SaveDialog1.fileName;
FS := TMemoryStream.Create;
try
screen.Cursor := crHourGlass;
// 服务端定义的文件夹Id
FolderNo := 'k01';
// 要下载的文件名称
netfileName := 'bag11.JPG';
// 连接秘钥
token := '123kuajiedl.';
// sErrorMsg:下载失败返回错误信息
// 连接并下载
if not ser.FileDownLoad(netfileName, FolderNo, token, Stream, sErrorMsg) then
begin
showmessage(sErrorMsg);
Exit;
end;
try
// Stream: 服务端返回的 Stream类型值
if Stream.Size = -1 then // 大小未知则一直读取到没有数据为止
begin
SetLength(Buffer, BufSize);
repeat
ReadCount := Stream.Read(Buffer[0], BufSize);
if ReadCount > 0 then
FS.WriteBuffer(Buffer[0], ReadCount);
if ReadCount < BufSize then
break;
until ReadCount < BufSize;
end
else // 大小已知则直接复制数据
FS.CopyFrom(Stream, 0);
// 保存到本地
FS.SaveToFile(savefileName);
showmessage('下载成功') except on ee: exception
do
begin
showmessage(ee.Message)
end;
end;
finally
screen.Cursor := crDefault;
freeandnil(FS);
end;
2,服务端界面: