基于Web服务的文件上传

     朋友在做项目时遇到一个奇怪的问题,那就是在asp.net设计中可以使用UploadFile控件对本地的任何文件以二进制流的方式上传到网络服务器上,其内置了一个打开文件的对话框,非常方便好用。不过随之而来的问题是:我们要上传一个固定的文件,不要用这个文件对话框来选择上传的文件,那么就应该设置UploadFile的FileName属性,我们做了,结果却不是我们想像的那样,这个FileName属性是只读的。不能显示地设置这个属性。那么这个控件就没有办法以我们期望的方式工作,而且我们用HTML语言的<input type=”file”>亦是如此。所以我们舍弃了这个控件,改用Web服务来实现浏览器的上传。

    我们这个实现要有两个步骤:

    1、我们实现这个web服务的FileUpload(string,string)方法;

    2、在网页中调用设置全适的参数调用这个方法。

    首先在我们的网站中添加一个Web服务。vs中打开这个服务类,添加一个静态的Upload(string,string)方法。这个方法实现文件的读取和存储实现。代码如下:

web服务文件:

[WebMethod]//这个服务器特性是必须的
   public static  void FileUpload(string localPathFile,string webPhysicalPathFile)//localPathFile是本地物理文

//件,    webPhysicalPathFile是服务器物理路径
   {
       FileStream inStream=null ;
       FileStream outStream=null;
       try
       { 
           string fileName = localPathFile.Substring(localPathFile.LastIndexOf("
\\")+1);
            //读取本地文件流
            inStream = File.OpenRead(localPathFile);
            string file = webPhysicalPathFile + fileName;//得到网络服务器的文件路径名;
            outStream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Write);
           byte[] bytes = new byte[4096];
           int start = 0;
           int length;
           while ((length = inStream.Read(bytes, 0, 4096)) > 0)
           {
               outStream.Write(bytes, 0, length);
               start += length;
           }
       }
       catch (Exception e)
       {
           throw new Exception("错误出现在:" + e.Message);
           inStream.Close();
           outStream.Close();
       }
       finally
       {
           inStream.Close();
           outStream.Close();
       }
   }

 

   其次在要调用的页面中找到要传输的文件路径信息。由于浏览器是用的网络服务器的虚拟路径,所以我们用Server.MapPath()方法将虚拟路径转换成实际的物理路径。要添加的代码:

调用方法

protected void FileUpload_Click(object sender, EventArgs e)
{
     string webPathFile = Server.MapPath(Request.Url.AbsolutePath);
     string webPath = webPathFile.Substring(0,webPathFile.LastIndexOf("\\") + 1);

    //调用Web服务方法 
     WebService.FileUpload (@"D:\测试文件.doc",webPath );
}

现在我们就可以成功地在将本地的文件保存到服务器上了。

posted @ 2010-03-21 15:43  suyan010203  Views(697)  Comments(1Edit  收藏  举报