利用WebClient上传文件

24 篇文章 0 订阅
20 篇文章 0 订阅


譬如:现在的开发的web应用程序的虚拟目录是WebAA,另一个应用程序的虚拟目录是WebBB,现在要从WebAA向WebBB下的一个UpLoadFiles文件夹下保存图片,如何处理?

如果要向这个路劲下传文件,可以完全不需要知道WebBB/UpLoadFiles的物理路径。可以用下面的简单方法实现:

1.在WebBB项目下添加一个UploadHandler.ashx文件,代码如下:
C# codepublic class UploadHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        string filename = context.Request.QueryString["filename"].ToString();
        using (FileStream inputStram = File.Create(context.Server.MapPath("UpLoadFiles/") + filename))
        {
            SaveFile(context.Request.InputStream, inputStram);
        }
       
    }
    protected void SaveFile(Stream stream, FileStream inputStream)
    {
        int bufSize=1024;
        int byteGet=0;
        byte[] buf=new byte[bufSize];
        while ((byteGet = stream.Read(buf, 0, bufSize)) > 0)
        {
            inputStream.Write(buf, 0, byteGet);
        }
    }
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

2.这样你就有了一个上传路径为http://xxxxxxxx/WebBB/UploadHandler.ashx
在WebAA项目中通过WebClient或者WebRequest请求该url,下面以WebClient为例说明。
在WebAA中新建test.aspx页面,上面有FileUpload控件FileUpload1和Button控件Button1,具体事件代码如下:
C# code
using System.IO;
using System.Net;

MemoryStream ms;
protected void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e)
{
    int bufSize = 10;
    int byteGet = 0;
    byte[] buf = new byte[bufSize];
    while ((byteGet = ms.Read(buf, 0, bufSize)) > 0)//循环读取,上传
    {
        e.Result.Write(buf, 0, byteGet);//注意这里
    }
    e.Result.Close();//关闭
    ms.Close();关闭ms
}
protected void Button1_Click(object sender, EventArgs e)
{
    FileUpload fi = FileUpload1;

    byte[] bt = fi.FileBytes;//获取文件的Byte[]
    ms = new MemoryStream(bt);//用Byte[],实例化ms

    UriBuilder url = new UriBuilder("http://xxxxxxxx/WebBB/UploadHandler.ashx");//上传路径
    url.Query = string.Format("filename={0}", Path.GetFileName(fi.FileName));//上传url参数
    WebClient wc = new WebClient();
    wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted);//委托异步上传事件
    wc.OpenWriteAsync(url.Uri);//开始异步上传
}


总结:上面是从WebAA向WebBB下上传文件,当然也可以简单改造成在同一web中上传文件。这里不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值