首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教通过webrequest进行文件上传时遇到的问题 [无满意答案结帖,结帖人:adow]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • adow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2007-11-28 14:26:21 楼主
    虽然webclient可以直接实现文件上传到一个url地址,但是我想试试如何使用webrequest来实现

    private void Uploadfile(string filename)
        {
            if (!File.Exists(filename))
                return;
            /////时间标志
            string time_sign = DateTime.Now.Ticks.ToString("x");
            //string time_sign = "7d733d2c09b2";
            /////取数据流
            FileInfo fi = new FileInfo(filename);
            FileStream fs = new FileStream(filename, FileMode.Open);
            byte[] file_content = new byte[(int)fs.Length];
            int file_length = fs.Read(file_content, 0, (int)fs.Length);
            fs.Close();

            string time_sign_line_start = "-----------------------------" + time_sign + "\r\n";
            string time_sign_line_end = "-----------------------------" + time_sign + "--\r\n";
            string line_1 = "Content-Disposition: form-data; name=\"f_u_1\"; filename=\"" + filename + "\"\r\n";
            //string line_2 = "Content-Type: image/pjpeg\r\n\r\n";
            string line_2 = "Content-Type: application/octet-stream\r\n\r\n";

            string request_block = time_sign_line_start + line_1 + line_2 +
                Encoding.GetEncoding(1252).GetString(file_content) + "\r\n" +
                time_sign_line_start + "Content-Disposition: form-data; name=\"hd\"\r\n\r\n" +
                "hidden input\r\n" +
                time_sign_line_end;
            byte[] request_block_byte = Encoding.GetEncoding(1252).GetBytes(request_block);
            WebRequest request = WebRequest.Create("http://localhost:58010/testhttpupload/upload.aspx");

            request.Headers["Cache-Control"] = "no-cache";

            request.Method = "POST";
            request.ContentLength = request_block_byte.Length;

            Stream stream = request.GetRequestStream();
            stream.WriteTimeout = 10000;
            stream.Write(request_block_byte, 0, request_block_byte.Length);
            stream.Flush();
            stream.Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            Stream htmlstream = response.GetResponseStream();
            StreamReader sr = new StreamReader(htmlstream);
            string htmlcode = sr.ReadToEnd();
            sr.Close();
            htmlstream.Close();
            response.Close();
            this.Response.Write(htmlcode);

        }

    在那个接收文件的页面:
    protected void Page_Load(object sender, EventArgs e)
        {
            //////将请求流保存来查看
            byte[] request_byte = this.Request.BinaryRead(this.Request.ContentLength);
            FileStream fstream = new FileStream("e:\\test\\testhttpupload\\upload\\request.txt", FileMode.Create);
            fstream.Write(request_byte, 0, request_byte.Length);
            fstream.Close();
            if (this.Request.Files != null && this.Request.Files.Count > 0)
            {

                ////
                HttpFileCollection fs = this.Request.Files;
                HttpPostedFile file = fs[0];
                FileInfo fi = new FileInfo(file.FileName);
                string filename = "e:\\test\\testhttpupload\\upload\\" + fi.Name;
                file.SaveAs(filename);
                Response.Write("save file ok");
            }
            else
            {
                if (this.Request.Files == null)
                {
                    Response.Write("file null");
                    return;
                }
                else
                {
                    this.Response.Write("file "+this.Request.Files.Count.ToString());
                }

            }
        }
    每次文件上传时,我都把request的数据导出到一个文件中。而且,我从一个页面表单提交过来的上传也是成功的。但是我通过webreqeust来提交就不行,好像所有的request参数都没有取到,我甚至都把stream发送的流弄成也表单上传一样了,(输出的reqeust内容也一模一样)可就是没有办法取得request的参数,文件也没有。
    80  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • adow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-11-28 14:43:541楼 得分:0
    自己顶下先
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • heqi915
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-11-28 14:52:492楼 得分:0
    再帮你顶一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • adow
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2007-11-28 14:59:233楼 得分:0
    谢谢,那又可以再顶
    修改 删除 举报 引用 回复