用SmartUpload上传文件到服务器,IE到底传了什么啊!假如我有用一个application,该怎么做呢?
用SmartUpload上传文件到服务器,IE到底传了什么啊!假如我现在没有界面,用一个application做SmartUpload的客户端,该怎么做呢? 问题点数:0、回复次数:10Top
1 楼kjah(黑丁)回复于 2003-12-01 18:05:09 得分 0
applications 传文件应该是socket编程Top
2 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-01 18:18:04 得分 0
不行啊1我现在只能用HTTP上传,我的想法是去设置request的Header中的
content-type = multipart/form-data; boundary=---------------------------7d32c227
3202ce和
dataHeader::Content-Disposition: form-data; name="FILE4"; filename="C:\Documents
and Settings\fangdh\桌面\request.bak"
不过好象不行的。
看RFC1867后还是不是很明白的,不知道那个流到底是怎么处理。谢谢帮助!!!Top
3 楼tijichen(笑起来像狗)回复于 2003-12-02 11:57:07 得分 0
http://www.java-cn.com/bbs-jsp/show.jsp?id=4942&forum=net
我在JAVA中文站发表的文章,主要是分析了HTTP文件上传的格式和内容,希望对你有帮助Top
4 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-03 09:55:06 得分 0
谢谢tijichen(chenzhi) 的热心帮助,那个什么RFC1867,引入了一个input file,IE读文件流给jsp,多个文件间用两个ch(13),还有什么头的,
我只有自己写代码去读文件了。
好象进不去的Top
5 楼dugang106(冷风细雨)回复于 2003-12-03 10:05:52 得分 0
不知道你用的工具能否设置断点调试,如果你调试一下的话,就很清楚了Top
6 楼tijichen(笑起来像狗)回复于 2003-12-03 12:53:47 得分 0
我把文章贴出来吧
以下格式适合于FORM的ENCTYPE为multipart/form-data"的情况
其实在一个项目中,文件上传是很重要的一环,我们经常会用到网上下栽的现成的上传包,其实有时用在项目中感觉很别扭。如果自己编写一个,肯定会更符合项目的实际情况,比如在里面加上权限控制、文件按类型自动分开存放等等,其实只要搞清了HTTP的格式,编写这样的程序是不难的
下面是一个我测试用的例子,我把HTTP的内容打印了出来,如下:
-----------------------------7d333a81402d8
Content-Disposition: form-data; name="jitfile"; filename="F:\库存补充21230.txt"
Content-Type: text/plain
领料/退料单的来源单据加上服务单。
-----------------------------7d333a81402d8
Content-Disposition: form-data; name="mrpfile"; filename=""
Content-Type: application/octet-stream
-----------------------------7d333a81402d8--
再分析一下:
分隔符 //这个是随机的,每次都不一样
13 10 //这两个字符分割符拉,程序中通过判断这两个符号来决定读取到了那一部分
Content-Disposition:;name-"";filename="";//这些偶就不想说了
13 10
Content-Type:text/plain
13 10
13 10
文件内容
13 10
分隔符
45 45 13 10//这四个字符一起出现就表示了HTTP内容的结束
还有个注意的地方,就是在最开始从REQUEST中读取内容到数组的时候
是不能一次性读取完了,应该设个循环,其他地方小心点就是了Top
7 楼leshui(大象无形)(有物混成,先天地生)回复于 2003-12-03 13:02:33 得分 0
传的是字节流Top
8 楼cbhyk()回复于 2003-12-03 14:24:35 得分 0
http://expert.csdn.net/Expert/topic/2300/2300333.xml?temp=.8086969Top
9 楼cbhyk()回复于 2003-12-03 14:26:14 得分 0
http://expert.csdn.net/Expert/topic/2238/2238658.xml?temp=1.171291E-03
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
public class SimulateUpload
{
private static final byte[] BOUNDARY = "---------------------------7d33bc1b47038c".getBytes();
private static final byte[] CRLF = "\r\n".getBytes();
public void simUpload(String page, String[] paramNames, Object[] paramValues, OutputStream os) throws IOException
{
int contentLength = calculateLength(paramNames, paramValues);
os.write(("POST " + page + " HTTP/1.1").getBytes());
os.write(CRLF);
os.write("User-Agent: myselfHttp/1.0".getBytes());
os.write(CRLF);
os.write("Accept: */*".getBytes());
os.write(CRLF);
os.write("Host: ".getBytes());
os.write(InetAddress.getLocalHost().getHostAddress().getBytes());
os.write(CRLF);
os.write("Content-Type: multipart/form-data; boundary=".getBytes());
os.write(BOUNDARY);
os.write(CRLF);
os.write(("Content-Length: " + contentLength).getBytes());
os.write(CRLF);
os.write(CRLF);
os.write(BOUNDARY);
os.write(CRLF);
for(int i=0; i<paramNames.length; i++)
{
if(paramValues[i] instanceof String)
writeParameter(os, paramNames[i], (String) paramValues[i]);
else if(paramValues[i] instanceof File)
writeFile(os, paramNames[i], (File) paramValues[i]);
}
os.flush();
}
private void writeFile(OutputStream os, String paramName, File file) throws IOException
{
os.write("Content-Disposition: form-data; name=\"".getBytes());
os.write(paramName.getBytes());
os.write("\"; filename=\"".getBytes());
os.write(file.getAbsolutePath().getBytes());
os.write("\"\r\nContent-Type: application/octet-stream".getBytes());
os.write(CRLF);
os.write(CRLF);
FileInputStream fis = new FileInputStream(file);
byte[] buf = new byte[4096];
int bytes = 0;
while((bytes = fis.read(buf)) != -1)
os.write(buf, 0, bytes);
fis.close();
os.write(CRLF);
os.write(BOUNDARY);
os.write(CRLF);
}
private void writeParameter(OutputStream os, String name, String value) throws IOException
{
os.write("Content-Disposition: form-data; name=\"".getBytes());
os.write(name.getBytes());
os.write('"');
os.write(CRLF);
os.write(CRLF);
os.write(value.getBytes());
os.write(CRLF);
os.write(BOUNDARY);
os.write(CRLF);
}
private int calculateLength(String[] paramNames, Object[] paramValues)
{
int result = BOUNDARY.length + CRLF.length;
for(int i=0; i<paramNames.length; i++)
{
if(paramValues[i] instanceof String)
result += 88 + paramNames[i].getBytes().length + ((String)paramValues[i]).getBytes().length;
else if(paramValues[i] instanceof File)
{
File file = (File) paramValues[i];
result += 141 + paramNames[i].getBytes().length + file.getAbsolutePath().getBytes().length + file.length();
}
}
return result;
}
public static void main(String[] args)
{
try
{
Socket socket = new Socket("localhost", 80);
OutputStream os = socket.getOutputStream();
SimulateUpload sim = new SimulateUpload();
String[] paramNames = new String[]{"param1", "param2", "param3", "file", "file2"};
Object[] paramValues = new Object[]{"value1", "value2", "value3", new File("d:\\test.txt"), new File("d:\\test1.txt")};
sim.simUpload("/uploadServlet", paramNames, paramValues, os);
os.flush();
os.close();
socket.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Top
10 楼FDH007(麻木的下一步就是堕落)回复于 2003-12-09 14:57:37 得分 0
谢谢大家的热心帮助!Top




