首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

哪位高手有做文件上传下载的例子

2012-03-07 
谁有做文件上传下载的例子结构:Client(SocketConnection) + Server(RemoteDataModule ) + DataBase(sql se

谁有做文件上传下载的例子
结构:Client(SocketConnection) + Server(RemoteDataModule ) + DataBase(sql server 2000) 

谁能给我一个文件上传下载的例子啊,谢谢啊,急啊!

[解决办法]
接收端:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ScktComp, ToolWin;

type
TDataFlag=record
FileName:string;
Filesize:integer;
WorkFlag:integer;
end;
PDataFlag=^TDataFlag; 
TForm1 = class(TForm)
ToolBar1: TToolBar;
StatusBar1: TStatusBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
sv: TServerSocket;
Panel1: TPanel;
RichEdit1: TRichEdit;
Splitter1: TSplitter;
Lv1: TListView;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure ToolButton3Click(Sender: TObject);
procedure ToolButton4Click(Sender: TObject);
procedure ToolButton1Click(Sender: TObject);
procedure ToolButton2Click(Sender: TObject);
procedure ToolButton5Click(Sender: TObject);
procedure svAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure svClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure svClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure svClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure svClientRead(Sender: TObject; Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
const bufsize=4096;
var
stream:Tmemorystream;
working:boolean;
sendport:integer;
{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
sv.Active:=false;
sv.Close;
stream.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
stream:=Tmemorystream.Create;
stream.Position:=0;
working:=false;
end;

procedure TForm1.ToolButton3Click(Sender: TObject);
begin
working:=false;
sv.Port:=6768;
sv.Active:=true;
stream.Clear;
richedit1.Lines.Add(datetimetostr(now())+'==>>文件传送服务器启动!');
  
end;

procedure TForm1.ToolButton4Click(Sender: TObject);
begin
 if lv1.Items.Count =0 then
exit;
stream.Clear;
working:=false;
sv.Socket.Connections[sendport].SendText('filetransferstop');
richedit1.Lines.Add(datetimetostr(now())+'==>>停止当前接受任务!');
end;

procedure TForm1.ToolButton1Click(Sender: TObject);
begin
caption:='start';
stream.Clear;
working:=true;
sv.Socket.Connections[sendport].SendText('filetransferwork');
richedit1.Lines.Add(datetimetostr(now())+'==>>开始接受文件。');
end;

procedure TForm1.ToolButton2Click(Sender: TObject);
begin
working:=false;
sv.Active:=false;
stream.Clear;
richedit1.Lines.Add(datetimetostr(now())+'==>>文件传送服务器停止!');
end;

procedure TForm1.ToolButton5Click(Sender: TObject);
begin
close;
end;

procedure TForm1.svAccept(Sender: TObject; Socket: TCustomWinSocket);
var
newitem:TListItem;
begin
newitem:=lv1.Items.Insert(lv1.Items.Count);
newitem.Caption:='Client:'+inttostr(lv1.Items.Count);
newitem.SubItems.Add(socket.RemoteHost);
newitem.SubItems.Add(socket.RemoteAddress);
newitem.SubItems.Add(inttostr(socket.RemotePort));
lv1.AlphaSort;
lv1.Items.Item[0].Selected:=true;


// ('连接到:'+socket.RemoteAddress+'成功!');
// showmessage('连接到:'+socket.RemoteAddress+'成功!');
end;

procedure TForm1.svClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var
df:PDataFlag;
begin
df:=new(PDataFlag);
df.FileName:='';
df.Filesize:=0;
df.WorkFlag:=0;
socket.Data:=df;
socket.SendText('已经连接,请准备好要传输的文件!');
richedit1.Lines.Add(datetimetostr(now())+'==>>文件传送服务连接用户:'+socket.RemoteAddress);
  
end;

procedure TForm1.svClientDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
var
i:integer;
begin
for i:=0 to lv1.Items.Count - 1 do
if lv1.Items.Item[i].SubItems.Strings[2]=inttostr(Socket.RemotePort) then
begin
richedit1.Lines.Add(Datetimetostr(now())+'==>>'+lv1.Items[i].Caption+'走了!');
lv1.Items.Item[i].Delete;
exit;
end;
end;

procedure TForm1.svClientError(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
errorcode:=0;
working:=false;
stream.Clear;
end;

procedure TForm1.svClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
buf:array[0..bufsize] of char;
numberbytes,i:integer;
df:PDataFlag;
cmd:string;
begin
df:=socket.Data;
case df.WorkFlag of
0:
begin
cmd:=trim(socket.ReceiveText);
if pos('FILESEND ',uppercase(cmd))>0 then
begin
df.FileName:=trim(copy(cmd,pos(' ',cmd)+1,length(cmd)));
df.Filesize:=strtoint(copy(df.FileName,pos(' ',df.FileName)+1,length(df.FileName)));
df.FileName:=trim(copy(df.FileName,1,pos(' ',df.FileName)));
df.WorkFlag:=1;
socket.Data:=df;
socket.SendText('文件传送服务准备完毕,可以传送!');
richedit1.Lines.Add(datetimetostr(now())+'==>>文件名:'+df.FileName+' 文件大小:'+inttostr(df.Filesize)+#13#10+'文件传送服务准备完毕,可以接受了!');
end;
end;
1:
begin
if working then
begin
//if socket.RemoteHost then
numberbytes:=socket.ReceiveLength;
socket.ReceiveBuf(buf,numberbytes);
stream.Write(buf,numberbytes);
if numberbytes>=bufsize then socket.SendText('filetransferwork');
if numberbytes<bufsize then
begin
socket.SendText('filetransferstop');
stream.Position:=0;
try
stream.SaveToFile(df.FileName);
richedit1.Lines.Add(datetimetostr(now())+'==>>文件接受完毕!');
df.WorkFlag:=0;
socket.SendText('文件传送服务器准备完毕,可以传输下一个文件!');
except

end;
stream.Clear;
end;
end;
end;
end;
if not working then socket.SendText('filetransferstop');
for i:=0 to lv1.Items.Count - 1 do
if lv1.Items.Item[i].SubItems.Strings[2]=inttostr(Socket.RemotePort) then
begin
sendport:=i;
end;
end;

end.


[解决办法]
String uploadPath = "uploadfile\\";
String tempPath = "file\\";
if (!new File(uploadPath).isDirectory())
new File(uploadPath).mkdirs();
if (!new File(tempPath).isDirectory())
new File(tempPath).mkdirs();

DiskFileUpload fu = new DiskFileUpload();
fu.setHeaderEncoding("utf-8");
fu.setSizeMax(2000000002);
fu.setSizeThreshold(4096);
fu.setRepositoryPath(tempPath);
List fileItems;
try {
fileItems = fu.parseRequest(request);


Iterator i = fileItems.iterator();

while (i.hasNext()) {
FileItem file = (FileItem) i.next();
if (file.isFormField())//是否是表单字段
System.out.println(file.getString("utf-8"));
else {
String fileName = file.getName();
fileName = fileName
.substring(fileName.lastIndexOf ("\\") + 1);
System.out.println(fileName);

if (fileName != null) {
File f1 = new File(uploadPath + fileName);
file.write(f1);

}
}

}

response.setCharacterEncoding("gb2312");
response.getWriter().println("上传成功");

} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}

热点排行