none
这点上传文件代码应该怎么样转成C#代码 RRS feed

  • 问题

  • 这段是java的一个文件上传的代码,我应该怎么样转成C# winform上的代码呢?或者这样说,我在C#当中应该使用哪个类呢.
    我是在vs2008下
    package com.xxx.getguestfile.sample;
    
    import java.io.BufferedReader;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    public class TestUpload {
    	public final static void main(String[] args) throws Exception {
    		// 使用http协议,按照rfc1867协议标准发送文件
    		File guest = new File("c:\\test.txt");  //旅客身份信息文本文件
    		File photo = new File("c:\\photo1.jpg"); //旅客照片
    
    		String BOUNDARY = "---------------------------198152288819156"; // 分隔符
    		// 旅客身份信息文本文件上传的http请求头
    		StringBuffer sbGuest = new StringBuffer();
    		sbGuest = sbGuest.append("--");
    		sbGuest = sbGuest.append(BOUNDARY);
    		sbGuest = sbGuest.append("\r\n");
    		sbGuest = sbGuest.append("Content-Disposition: form-data; name=\""
    				+ "guest" + "\"; filename=\"" + guest.getAbsolutePath()
    				+ "\"\r\n");
    		sbGuest = sbGuest.append("Content-Type: text/plain\r\n\r\n");
    		byte[] start_data_guest = sbGuest.toString().getBytes();
    
    		// 旅客照片上传的http请求头
    		StringBuffer sbPhoto = new StringBuffer();
    		sbPhoto = sbPhoto.append("--");
    		sbPhoto = sbPhoto.append(BOUNDARY);
    		sbPhoto = sbPhoto.append("\r\n");
    		sbPhoto = sbPhoto.append("Content-Disposition: form-data; name=\""
    				+ "photo" + "\"; filename=\"" + photo.getAbsolutePath()
    				+ "\"\r\n");
    		sbPhoto = sbPhoto
    				.append("Content-Type: image/jpg\r\n\r\n");
    		byte[] start_data_photo = sbPhoto.toString().getBytes();
    
    		// http请求结尾
    		byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
    
    		// java的http相关类库,建 立http链接
    		URL url = null;
    		HttpURLConnection connection = null;
    		url = new URL(
    				"http://xxx/getguestfile/service/acceptfile/upfile"); //上传文件处理服务地址
    		connection = (HttpURLConnection) url.openConnection();
    		connection.setDoOutput(true);
    		connection.setDoInput(true);
    		connection.setRequestMethod("POST");   //使用post发送
    
    		connection.setRequestProperty("Content-Type",
    				"multipart/form-data; boundary=" + BOUNDARY);
    		connection.setRequestProperty("Content-Length", String
    				.valueOf(start_data_guest.length+start_data_photo.length + guest.length()+photo.length()
    						+ end_data.length*2)); //计算报文长度
    		connection.setUseCaches(false);
    		connection.connect();
    
    		// 发送参数
    		DataOutputStream out = new DataOutputStream(connection
    				.getOutputStream());
    		out.write(start_data_guest);
    		out.write(getFile(guest)); //文件的字节数组
    		out.write(end_data);
    
    		out.write(start_data_photo);
    		out.write(getFile(photo));  
    		out.write(end_data);
    
    		out.flush();
    		out.close();
    		
    		if (connection.getResponseCode() == 200) {
    
    			InputStream u = connection.getInputStream();// 获取http连接的返回内容
    			BufferedReader in = new BufferedReader(new InputStreamReader(u));
    			StringBuffer buffer = new StringBuffer();
    			String line = "";
    			while ((line = in.readLine()) != null) {
    				buffer.append(line);
    			}
    			System.out.println("返回值" + buffer.toString()); //返回ok表示上传成功
    		} else {
    			System.out.println("连接失败");
    		}
    		
    		connection.disconnect();
    	}
    
    	private static byte[] getFile(File file) throws Exception {
    		FileInputStream da = new FileInputStream(file);
    		byte[] content = new byte[(int) file.length()];
    		if (file.length() > 0) {
    			da.read(content);
    		}
    		return content;
    
    	}
    }
    
    谢谢
    2010年12月2日 7:47

答案

  • 详细的代码您可以自己去转换。我把一些对应的类型告诉您:

    File (Java) -> System.IO.FileStream
    HttpUrlConnection (Java) -> System.Net.WebClient 或者 System.Web.HttpWebRequest
    StringBuilder (Java) -> System.Text.StringBuilder

    方法:

    1、利用 FileStream 把两个文件打开。
    2、利用 HttpWebRequest.RequestHeaders 把 HTTP 头信息设置好。
    3、利用 HttpWebRequest.Host, Method 等属性把服务器信息设置好。
    4、利用 HttpWebRequest.RequestStream 把文件二进制写进去。
    4、调用 HttpWebRequest.GetResponse() 方法,得到一个 WebResponseStream,可以看看 StatusCode 是不是 200,即上传成功与否。
    5、关闭 FileStream


    Mark Zhou
    • 已标记为答案 郭雪峰 2010年12月3日 1:36
    2010年12月2日 10:10

全部回复

  • dear
    你应该动手尝试类别转换,很多这两个语言的类别蛮多都很像的,方法名称可能会不同。
    若真的不懂,可使用搜寻平台,例如关键字
    c# HttpURLConnection

    便能搜索到以下
    http://www.google.com.tw/search?hl=&q=c%23+HttpURLConnection+&sourceid=navclient-ff&rlz=1B3GGLL_zh-TWTW400TW400&ie=UTF-8


    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月2日 9:06
  • 详细的代码您可以自己去转换。我把一些对应的类型告诉您:

    File (Java) -> System.IO.FileStream
    HttpUrlConnection (Java) -> System.Net.WebClient 或者 System.Web.HttpWebRequest
    StringBuilder (Java) -> System.Text.StringBuilder

    方法:

    1、利用 FileStream 把两个文件打开。
    2、利用 HttpWebRequest.RequestHeaders 把 HTTP 头信息设置好。
    3、利用 HttpWebRequest.Host, Method 等属性把服务器信息设置好。
    4、利用 HttpWebRequest.RequestStream 把文件二进制写进去。
    4、调用 HttpWebRequest.GetResponse() 方法,得到一个 WebResponseStream,可以看看 StatusCode 是不是 200,即上传成功与否。
    5、关闭 FileStream


    Mark Zhou
    • 已标记为答案 郭雪峰 2010年12月3日 1:36
    2010年12月2日 10:10
  • 谢谢指点,虽然我没有搞作网络编程,不过我相信还是可以的
    2010年12月3日 1:37