以前做了个上传图片到 图片服务器的功能  具体就是POST文件流,然后图片服务器接收此流.然后保存成图片!
服务器代码如下:
System.Drawing.Image postImage = System.Drawing.Image.FromStream(Request.InputStream);
postImage.Save(路径+ "/" + 文件名);现在想做个文件上传的功能, 如果我上传的是TXT文件 那就保存成TXT  FLV文件就保存成FLV
我这个只能保存图片. 具体怎么改代码呢 ~! 高手多多帮忙

解决方案 »

  1.   

    就是不会保存文件~ 具体代码高手帮忙写写保存文件不能用System.Drawing.Image 
      

  2.   

    FileUpLoad 上传 参考:
            if (fileImg.HasFile)
            {
                //检查是否为图片文件
                bool isImg = false;
                string contentType = fileImg.PostedFile.ContentType.ToLower();
                this.lblFileType.Text = contentType;
                string fileType = "";
                //判断文件MIME类型
                if (contentType.Equals("image/jpeg") ||contentType.Equals("image/pjpeg"))
                {
                    isImg = true;
                    fileType = "jpg";
                }
                if (contentType.Equals("image/gif"))
                {
                    isImg = true;
                    fileType = "gif";
                }            if (!isImg)
                {
                    this.lblMsg.Text = "您选择的可能不是图片文件,请上传JPG或GIF格式的文件!";
                    //Response.Write("<script>alert('您选择的可能不是图片文件,请上传JPG或GIF格式的文件!');location='javascript:history.go(-1)'</script>");
                }            //检查文件大小            int size = 0;            size = fileImg.PostedFile.ContentLength;            if (size > 600 * 1024)//大于600K
                {
                    Response.Write("<script>alert('您上传的文件大于600K,请处理后再上传!');location='javascript:history.go(-1)'</script>");
                }            string filename = DatetoFilename();
                string path = Server.MapPath("images");
                fileImg.SaveAs(path +"\\"+ filename + "."+fileType);        }
            else
            {
                this.chkShow.Checked = false;
                Response.Write("<script>alert('您未上传首页图片,我们将做不在首页显示处理!')</script>");
            }
      

  3.   

    图片就是文件啊你肯定要在.net的文件类中找方法了。
      

  4.   

    haihuan23 您的代码是上传到WEB服务器 不是POST流到另1台服务器~
    所以没什么用啊.这种我不适用啊! 
    请参考下我发的代码
      

  5.   

    gongsun 说的对!
    但是我找了好久 就是不知道用什么样的方法
      

  6.   

    SaveFileDialog.Filter ="视频文件(*.avi)|*.avi|所有文件(*.*)|*.*";SaveFileDialog.Filter ="位图文件(*.bmp)|*.bmp|JPEG文件(*.jpg;*.jpeg)|*.jpg;*.jpeg|所有文件(*.*)|*.*";bu
      

  7.   

    Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp); 
    System.Drawing.Imaging.ImageFormat.Bmp 用 SWITCH(文件类型) 取 相应 类
      

  8.   

    首先 你到 已经 接收到 数据,并转化成图片 不是吗?拿接下来 用SaveFileDialog 保存不就OK?你用过 Socket 传输过来 只是 一组 2进制数据,你会先 完全接受完成后,转化成 内存流
    MemoryStream  然后才 转化成 图片 或 别的什么数据 不是吗?》  while (true)
                    {
                        bool con = false;
                        List<byte> listBytes = new List<byte>();//装载接收图片数据
                        Socket tmpSocket = receiveSocket.Accept();
                        while (true)
                        {                        byte[] bytes = new byte[tmpSocket.ReceiveBufferSize];//存放每次接收到的数据  300 * 1024
                            int data = tmpSocket.Receive(bytes, bytes.Length, 0);
                            if (data == 1 || con == true)//表示数据接收完毕,跳出循环
                            { break; }
                            if (data <= 0)//当接收的数据为0时,进行sleep
                            { System.Threading.Thread.Sleep(40); con = true; continue; }                        for (int i = 0; i < data; i++)
                            {
                                //把每次接收到的数据写入listBytes
                                listBytes.Add(bytes[i]);
                            }
                        }
                        if (listBytes.Count > 0)
                        {
                            //因为socket是分包发送数据,所以等数据全部接收完后转换
                            using (MemoryStream ms = new MemoryStream(listBytes.ToArray()))
                            {
                                Bitmap Origninal = new Bitmap(ms);
                                Bitmap returnBmp = new Bitmap(Origninal.Width, Origninal.Height);
                                Graphics g = Graphics.FromImage(returnBmp);
                                g.DrawImage(Origninal, 0, 0);
                                ms.Close();
                                pictureBox1.Image = (Image)returnBmp;                          
                                //pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp);                          
                            }
                        }
    此函数,把接收到得 二进制 数据 转化成 图片要实现你的功能,你必须写一个借口,然后 对你可能用到 每一种格式(图片,视频,文档)写个 转化类!然后根据你 传输过来的格式 你进行判断,,,new 哪个类来实现 转化!然后用 上面的  SaveFileDialog 
    这是我 大概的思路!
      

  9.   

    同样是文件,用文件流FileStream来做不可以了吗?
      

  10.   

    mingxingxia 老大 帖帖代码 !
    我就是这个思路!但是不会写代码
      

  11.   

    mingxingxia  咱能来点代码吗!!!
    思路我都知道 就是不知道怎么写代码!!
      

  12.   

    或者换句话 可不可以这么解释 
    Request.InputStream 怎么保存成文件!?
      

  13.   

     把
    System.Drawing.Image postImage = System.Drawing.Image.FromStream(Request.InputStream); 
    postImage.Save(路径+ "/" + 文件名); 
    换成:
    Request.SaveAs(径+ "/" + 文件名, false);就这一句就搞定了。. 自己终于研究出来了
      

  14.   

    上面不是给出例子代码!!!
    修改后面 转化部分 不就OK?判断:文件传输前 + 5个 固定长度字符 发送(保存 文件类型 ,如3.map : map~~  多的两位用特殊字符代替) byte[] bufCmd = new byte[5];
                int iCount = tmpSocket.Receive(bufCmd, 0, 5, SocketFlags.Partial);
                string strCommand = Encoding.UTF8.GetString(bufCmd, 0, CMDLEN);
                return strCommand = strCommand.TrimEnd("~~");switch(strCommand )
    {
    case "map":
    //借口  
    interface1 c = new 类名(); //继承借口的类,
    c.函数()  //转化成 文件
    break;}
    http://download.csdn.net/source/840010   有源码 别的写!没看过,自已去看看,可能有用
      

  15.   

    那就要用到文件流  还不如先如果是txt就新建一个txt文件然后把内容放到里面就行了
      

  16.   

     string fileName = upFile.FileName;     
    string type = fileName.Substring(fileName.LastIndexOf(".") + 1).ToLower();  
     
    HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + filename);
                        Response.BinaryWrite(file );
                        Response.Flush();
                        Response.End();