200分求idhttp上传文件的方法。

darkie28 2005-09-29 03:50:03
高分求http上传文件的办法,希望大家说的详细点,并能很有耐心的帮我解决这个问题,其实这个问题不难,我也找了很多资料,下了很多代码,可是用他们的办法,老是程序出错,要么返回http/1.1 400的错误,要么返回http/1.1 404的错误。谢谢大家先。
...全文
662 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
darkie28 2005-10-10
  • 打赏
  • 举报
回复
也把我在服务端接收的rcv.asp代码也写出来,以后有人喷到相关问题,也好解决。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用Delphi写ASP组件实现快速多文件WEB上传演示</title>
</head>
<body>
<p align="center">用Delphi写ASP组件实现快速多文件WEB上传演示</p>
<%
dim ob
dim fsize
set ob=server.createobject("ASPComponent.CoIFileUpload")
path=server.mappath(".")
fsize=ob.savefile(path,true)
response.write "<br>文本框值:" & ob.request("text1")
response.write "<br>文本域值:" & ob.request("textarea1")
response.write "<br>编码数据大小: " & fsize
response.write "<br>文件保存路径: " & path
response.write "<br>文件1: 文件名:" & ob.Request("file1") & ", 文件类型:" & ob.FileType("file1") & ", 文件大小:" & ob.FileSize("file1")
response.write "<br>文件1: 文件名:" & ob.Request("file2") & ", 文件类型:" & ob.FileType("file2") & ", 文件大小:" & ob.FileSize("file2")
%>

</body>
</html>
myy()到这里领分,顺便看看如何改上传文件名的问题。
http://community.csdn.net/Expert/topic/4315/4315830.xml?temp=.8935358


myy 2005-10-08
  • 打赏
  • 举报
回复
不是面板上的控件,是个类,自己在 use 中加 :IdMultipartFormData
darkie28 2005-10-08
  • 打赏
  • 举报
回复
我Indy用9.00.18版的,可是没有找到TIdMultiPartFormDataStream这个控件啊,而且用你的程序带进去,提示TIdMultiPartFormDataStream错误,错误提示也是说没有这个控件。
darkie28 2005-10-08
  • 打赏
  • 举报
回复
up
myy 2005-10-07
  • 打赏
  • 举报
回复
我不会ASP,只会JSP,但原理都是一样的。

在网上找个“能接受普通html上传文件的asp”应该不难吧?
darkie28 2005-10-07
  • 打赏
  • 举报
回复
myy(),能提供我rcv.asp的代码吗?谢谢。
myy 2005-09-30
  • 打赏
  • 举报
回复
idhttp + idMutilPartFormData 十分简单,例子:

...
var
res : String;
mps : TIdMultiPartFormDataStream;
begin
try
mps := TIdMultiPartFormDataStream.Create;
msp.AddFile('File1','c:\test1.zip','');
msp.AddFile('File2','c:\test2.zip','');
res:=idhttp1.Post('http://xxxx/rcv.asp',mps);
...
finally
mps.Free;
end;
end;
...

注意:Indy最好用比较新的版本如 9.00.18或10.xxxxx,
旧版本的idMutilPartFormData.pas有一些bug.
duoduolao 2005-09-30
  • 打赏
  • 举报
回复
gz,帮顶。
darkie28 2005-09-30
  • 打赏
  • 举报
回复
不好意思,asp接收的代码发错了,新的如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用Delphi写ASP组件实现快速多文件WEB上传演示</title>
</head>
<body>
<p align="center">用Delphi写ASP组件实现快速多文件WEB上传演示</p>
<%
dim ob
dim fsize
set ob=server.createobject("ASPComponent.CoIFileUpload")
path=server.mappath(".")
fsize=ob.savefile(path,true)
response.write "<br>文本框值:" & ob.request("text1")
response.write "<br>文本域值:" & ob.request("textarea1")
response.write "<br>编码数据大小: " & fsize
response.write "<br>文件保存路径: " & path
response.write "<br>文件1: 文件名:" & ob.Request("file1") & ", 文件类型:" & ob.FileType("file1") & ", 文件大小:" & ob.FileSize("file1")
response.write "<br>文件1: 文件名:" & ob.Request("file2") & ", 文件类型:" & ob.FileType("file2") & ", 文件大小:" & ob.FileSize("file2")
%>

</body>
</html>
darkie28 2005-09-30
  • 打赏
  • 举报
回复
楼上的,谢谢先,你说的能不能结合一些代码?
我从网上找的资料里,有个asp接收的,代码如下:
<%'建立对象
Set upfile = Server.CreateObject("myobj.upfile")

'获得表单对象
response.write upfile.form("a1")&"<br>"
response.write upfile.form("a2")&"<br>"
response.write upfile.form("a3")&"<br>"
response.write upfile.form("a4")&"<br>"
response.write upfile.form("a5")&"<br>"
response.write upfile.form("a6")&"<br>"

'获得文件大小
response.write "文件字节数:"&upfile.filesize&"<br>"
'获得文件类型
response.write "文件类型:"&upfile.filetype&"<br>"

'获得文件名,保存文件
upfile.filesaveas("d:\"+upfile.filename)

set upfile = nothing
%>
delphi中上传的代码:
procedure TForm1.SendPostData(filename:string);
Const
CRLF = #13#10;
var
Source: TMemoryStream;
Source1: TMemoryStream;
Response: TStringStream;
S,s1: String;
begin
Screen.Cursor := crHourGlass;
try
memoHTML.Clear;
HTTP.Request.Username := '';
HTTP.Request.Password := '';
HTTP.Request.ProxyServer := '';
HTTP.Request.ProxyPort := 80;
HTTP.Request.ContentType := 'multipart/form-data';
HTTP.Intercept := LogDebug;
HTTP.InterceptEnabled := true;

Response := TStringStream.Create('');
try

S := '-----------------------------7cf1d6c47c' + CRLF +
'Content-Disposition: form-data; name="file1"; filename="'+filename+'"'+CRLF +
'Content-Type: application/octet-stream' + CRLF + CRLF;

//上传文件内容
s1:='file one content. Contant-Type can be application/octet-stream or if'+
'you want you can ask your OS fot the exact type.' + CRLF +
'-----------------------------7cf1d6c47c' + CRLF + //分界符,用于分隔表单(Form)中的各个域
'Content-Disposition: form-data; name="text1"' + CRLF + CRLF +
'hello2' + CRLF +
'-----------------------------7cf1d6c47c--';

//提交的下一个表单内容域的内容
s1:=CRLF +'-----------------------------7cf1d6c47c' + CRLF +
'Content-Disposition: form-data; name="text1"' + CRLF + CRLF +
'hello2' + CRLF +
'-----------------------------7cf1d6c47c--';

Source := TMemoryStream.Create;
Source1 := TMemoryStream.Create;
Source1.LoadFromFile(filename);
Response:=TStringStream.Create('') ;
Response.CopyFrom(source1,source1.Size);

s:=s+Response.DataString;//因为只能传字符串
Source.Position :=0;
Source.Write(s[1],length(s));
Source.Position :=source.Size ;
Source.Write(s1[1],length(s1));
Response.Position :=0;
try
HTTP.Post(cbURL.Text, Source, Response);
finally
Source.Free;
end;
memoHTML.Lines.Text := Response.DataString;
finally
Response.Free;
end;
finally
Screen.Cursor := crDefault;
end;

end;
可是我运行后却返回http\1.1 400或者404的错误。
myy 2005-09-29
  • 打赏
  • 举报
回复
idhttp配合idMutilPartFormData就可以上传文件,但前提是服务端要有个asp(或jsp),用来接收,
这个asp(或jsp)必须能解析multipart/form-data类型的上传数据。举个例子:

<form method="POST" ENCTYPE="multipart/form-data" action="rcv.asp">
<input name="a" type="file" />
</form>

这个表单在snd.htm文件中,提交目标是rcv.asp,如果rcv.asp能解析提交的数据,
分解出文件来,那么就可以用 idhttp + idMutilPartFormData 模拟snd.htm,
通过rcv.asp进行文件上传。


直接用idhttp就可以把文件post到服务器上也要有asp(或jsp)接收才行,但不常用,
这时候接收的asp不用解析数据流,因为收到的全部数据就是文件的内容,直接保存就行了。
缺点是无法一次上传多个文件,如果用html页面也没有直接对应的办法。
darkie28 2005-09-29
  • 打赏
  • 举报
回复
分数虽然才开20,但是我会新开贴给分的.
darkie28 2005-09-29
  • 打赏
  • 举报
回复
网上下的例子里,一般都带有一个delphi程序和一个html文件和一个asp文件,通过html文件上传好像就不行了。
fei1108 2005-09-29
  • 打赏
  • 举报
回复
可以用idhttp+asp上传到数据库,你首先要检查ASP上传数据是否正确,如果ASP添加数据没有问题,http可以直接post经ASP文件到数据库
darkie28 2005-09-29
  • 打赏
  • 举报
回复
看了些资料,有两种办法,一种是直接用idhttp就可以把文件post到服务器上,一种是服务端要有个asp,用来接收,可是我两种试过都不行。
其实我的要求很简单,就是把本地的文件(比如:c:\ccc.txt)上传到服务器上,我iis都已经装了,是不是装完iis后,还学要在服务端设置一下才行?

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧