unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
IdHTTP, StdCtrls; type
TForm1 = class(TForm)
btn1: TButton;
IdHTTP1: TIdHTTP;
procedure btn1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btn1Click(Sender: TObject);
var
iLen:integer;
sFN,sPath:string;
MS,MS2:TMemoryStream;
begin
MS:=TMemoryStream.Create;
try
sPath:=ExtractFilePath(application.ExeName)+'a.bmp';
sFN:=ExtractFileName(sPath);
iLen:=length(sFN); MS.WriteBuffer(iLen,sizeof(iLen));
MS.WriteBuffer(sFN[],iLen); MS2:=TMemoryStream.Create;
MS2.LoadFromFile(sPath); iLen:=MS2.Size; MS.WriteBuffer(iLen,sizeof(iLen)); MS.CopyFrom(MS2,iLen);
MS2.Free;
IDHTTP1.post('http://127.0.0.1:2111',MS,nil);
finally
MS.Free;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
// IdHTTP1.Host:= '127.0.0.1';
// IdHTTP1.Port:= 2111;
end; end. unit Unit1; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdTCPServer, IdCustomHTTPServer,
IdHTTPServer; type
TForm1 = class(TForm)
IdHTTPServer1: TIdHTTPServer;
procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo;
AResponseInfo: TIdHTTPResponseInfo);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation {$R *.dfm} procedure TForm1.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
var
iLen:Integer;
sData,sFN:string;
MS:TMemoryStream;
pData:PChar;
begin
sData:=ARequestInfo.UnparsedParams;
if sData<>'' then
begin
{
自己定义一个简单的消息格式,数据长度1,数据1,数据长度2,数据2 |文件名长度|文件名|文件内容长度|文件内容|
|5|a.bmp|17788|0x10101010101001010100101...| } MS:=TMemoryStream.Create;
try
//1读取文件名
MS.WriteBuffer(sData[],length(sData));
MS.Position:=;
MS.ReadBuffer(iLen,sizeof(iLen)); //读文件名长度
SetLength(sFN,iLen);
MS.ReadBuffer(sFN[],iLen); //读文件名
//2读取文件内容
MS.ReadBuffer(iLen,sizeof(iLen));//读文件内容长度
GetMem(pData,iLen);
MS.ReadBuffer(pData^,iLen);//读文件内容 pData里面保存的就是图片数据 //3保存为文件
MS.Clear;
MS.WriteBuffer(pData^,iLen);
MS.SaveToFile(ExtractFilePath(Application.ExeName) +sFN);
finally
MS.Free;
end;
end;
end; procedure TForm1.FormCreate(Sender: TObject);
begin
IdHTTPServer1.DefaultPort:= ;
IdHTTPServer1.Active:= true;
Self.Caption:= '启动';
end; end.

idhttp文件的上传和下载的更多相关文章

  1. java实现ftp文件的上传与下载

    最近在做ftp文件的上传与下载,基于此,整理了一下资料.本来想采用java自带的方法,可是看了一下jdk1.6与1.7的实现方法有点区别,于是采用了Apache下的框架实现的... 1.首先引用3个包 ...

  2. 在SpringMVC框架下实现文件的 上传和 下载

    在eclipse中的javaEE环境下:导入必要的架包 web.xml的配置文件: <?xml version="1.0" encoding="UTF-8" ...

  3. SecureCRT使用sz和rz命令进行文件的上传和下载

    SecureCRT可以使用sz和rz命令进行文件的上传和下载. sz文件下载: 格式:sz 文件名称 即可将服务器的文件下载至本地. rz文件上传: 格式:rz 文件名称 即可将本地文件上传至服务器. ...

  4. 使用FTPClient进行文件服务器内文件的上传和下载

    我用的FTPClient是由Apache组织的commons-net.jar包中的API,这个包用起来非常的方便,很容易上手.我在项目开发的过程中主要用到了文件的上传和下载功能,下面将我开发的代码贴出 ...

  5. iOS开发中文件的上传和下载功能的基本实现-备用

    感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...

  6. Apache FtpServer 实现文件的上传和下载

    1 下载需要的jar包 Ftp服务器实现文件的上传和下载,主要依赖jar包为: 2 搭建ftp服务器 参考Windows 上搭建Apache FtpServer,搭建ftp服务器 3 主要代码 在ec ...

  7. 初学Java Web(7)——文件的上传和下载

    文件上传 文件上传前的准备 在表单中必须有一个上传的控件 <input type="file" name="testImg"/> 因为 GET 方式 ...

  8. java web(四):request、response一些用法和文件的上传和下载

    上一篇讲了ServletContent.ServletCOnfig.HTTPSession.request.response几个对象的生命周期.作用范围和一些用法.今天通过一个小项目运用这些知识.简单 ...

  9. 黏包-黏包的成因、解决方式及struct模块初识、文件的上传和下载

    黏包: 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包. 只有TCP协议中才会产生黏包,UDP协议中不会有黏包(udp协议中数 ...

随机推荐

  1. node - TypeError: argument handler must be a function 路由报错的原因

    原因 : 路由一定要暴露给外部使用   var express = require('express') var router = express.Router()   router.get('/', ...

  2. XV6操作系统代码阅读心得(五):文件系统

    Unix文件系统 当今的Unix文件系统(Unix File System, UFS)起源于Berkeley Fast File System.和所有的文件系统一样,Unix文件系统是以块(Block ...

  3. EBP寻址

    一.EBP寻址 ESP:栈顶指针 (程序对与堆栈的使用 使用到哪里,esp就是哪里) EBP:  栈底指针 之前都是借用ESP去寻址确定一些参数 ,但如果存到堆栈里面的值过多,那么就得不断地调整ESP ...

  4. 六十二、SAP中的字符串运算符与文本拼接

    一.代码如下 二.输出效果如下

  5. 054-for循环

    <?php for($i=1;$i<=5;$i++){ echo "$i<br />"; //循环体 } ?>

  6. 深度解析Critical Thinking的四个阶段

    关于批判性思维我们一直都在讨论学习,但是小编相信没有几个留学生敢说自己有Critical Thinking,但它又是essay写作中必须存在的.那么批判性思维需要怎么培养呢?今天小编就给同学们分析一下 ...

  7. 学习spring第6天(aop获取目标方法参数)

    关于<aop:around>中的方法,需要第一个参数为ProceedJoinPoint,在方法体中通过该参数调用proceed()才能使目标方法得到调用. 当一个切面中有多个<aop ...

  8. UVA - 818 Cutting Chains(切断圆环链)(dfs + 二进制法枚举子集)

    题意:有n个圆环(n<=15),已知已经扣在一起的圆环,现在需要打开尽量少的圆环,使所有圆环可以组成一条链. 分析:因为不知道要打开哪个环,如果列举所有的可能性,即枚举打开环的所有子集,最多才2 ...

  9. 每天一点点之vue框架开发 - vue 动态替换路由(地址栏)参数

    import merge from 'webpack-merge': // 修改原有参数 this.$router.push({ query:merge(this.$route.query,{'max ...

  10. sql拆分列 时间拆分 日、月、年

    我想 查看今日访问人数 需要分组查询 就得 时间拆分 这两天百度 方法有很多 substring ... 但是 我这一列 是时间类型: 可以直接用 DATEPART() 函数用于返回日期/时间的单独部 ...