利用 mOrmot 上传文件

mOrmot 是是业界公认 非常优秀的 代码库,支持几乎所有流行的Pascal 开发环境,跨平台(不彻底),高效率。 示例程序多!但还可以更多:比如示例中只有下载,却没有发现上载的。经过在其论坛和网上搜索,发现下面的 代码可以实现上载:

function UploadFile(FileName: string): Boolean;
var
  rlt, url: SockString;
  D: Variant;
  ms: TMemoryStream;
  LRawBytes: RawByteString;
begin
  ms := TMemoryStream.Create;
  try
    ms.LoadFromFile(FileName);
    LRawBytes := StreamToRawByteString(ms);
    TDocVariantData(D).AddValue('filename', ExtractFileName(FileName));
    TDocVariantData(D).AddValue('data', GetFileBase64Bytes(FileName)); // 一定Base64 编码不然接收不到完整数据

    url := SockString(Format('http://%s:%s/UpFile/', [gServerIP, gServerPort]));

    // 这里是关键  
    rlt := TWinHTTP.Post(url, SockString(D),
       SockString('Content-Type: multipart/form-data; boundary=' + IntToHex(Random(MaxInt), 8)
           + '_info_boundary'), True,  nil);  // True :aIgnoreSSLCertificateErrors
    Result := rlt = 'OK';
  finally
    ms.Free;
  end
end;

这种方法仍然不够高效,因为要转为 base64编码,这样增加了传输的负担(1/3),希望能有更好的方法。

上面的 url 中“UpFile” 是服务端解析约定的字符串, 服务器接收文件数据并保存后,返回"OK" 。可以自行定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值