微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WebService上传和下载文件

/*上传文件的WebService*/

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.IO;

/// <summary>
/// Upload 的摘要说明。
/// </summary>
[WebService(Namespace = "http://tempuri.org/",
   Description = "在Web Services里利用.NET框架进上载文件。")]
public class UploadFile : System.Web.Services.WebService
{
    public UploadFile()
    {
    }

    [WebMethod(Description = "Web 服务提供的方法,返回是否文件上载成功与否。")]
    public string Upload(byte[] fs,string fileType)
    {
        string FileName = System.DateTime.Now.ToString("yyyyMMddHHmmssms") +"." +fileType;
        try
        {
            ///定义并实例化一个内存流,以存放提交上来的字节数组。
            MemoryStream m = new MemoryStream(fs);
            ///定义实际文件对象,保存上载的文件
            FileStream f = new FileStream(Server.MapPath(".") + "\\UploadFile\\"
             + FileName,FileMode.Create);
            ///把内内存里的数据写入物理文件
            m.Writeto(f);
            m.Close();
            f.Close();
            f = null;
            m = null;
            return FileName;
        }
        catch (Exception ex)
        {
            return null;
        }
    }

    [WebMethod(Description = "Web 服务提供的方法删除指定文件")]
    public void Delete(string fileName)
    {
        string filePath = Server.MapPath(".") + "\\UploadFile\\" + fileName;       
        File.Delete(filePath);
    }
}

 

/*下载文件*/

using System;
using System.Web;
using System.Collections;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.IO;

/// <summary>
/// GetBinaryFile 的摘要说明。
/// Web Services名称:GetBinaryFile
/// 功能:返回服务器上的一个文件对象的二进制字节数组。
/// </summary>
[WebService(Namespace = "nofollow" href="javascript:void()" class="outlink" data="/link?url=http://tempuri.org/" style="text-decoration:none; color:rgb(24,
Description = "在Web Services里利用.NET框架进行传递二进制文件。")]
public class GetBinaryFile : System.Web.Services.WebService
{
    /// <summary>
    /// Web 服务提供的方法,返回给定文件的字节数组。
    /// </summary>
    [WebMethod(Description = "Web 服务提供的方法,返回给定文件的字节数组")]
    public byte[] GetFile(string requestFileName)
    {
        string fileName = Server.MapPath(".") + "\\UploadFile\\" + requestFileName;
        return getBinaryFile(fileName);
    }

    /// <summary>
    /// getBinaryFile:返回所给文件路径的字节数组。
    /// </summary>
    /// <param name="filename"></param>
    /// <returns></returns>
    public byte[] getBinaryFile(string filename)
    {
        if (File.Exists(filename))
        {
            try
            {
                ///打开现有文件以进行读取。
                FileStream s = File.OpenRead(filename);
                return ConvertStreamToByteBuffer(s);
                s.Close();
            }
            catch (Exception e)
            {
                return new byte[0];
            }
        }
        else
        {
            return new byte[0];
        }
    }

    /// <summary>
    /// ConvertStreamToByteBuffer:把给定的文件流转换为二进制字节数组。
    /// </summary>
    /// <param name="theStream"></param>
    /// <returns></returns>
    public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)
    {
        int b1;
        System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
        while ((b1 = theStream.ReadByte()) != -1)
        {
            tempStream.WriteByte(((byte)b1));
        }
        return tempStream.ToArray();

    }

    [WebMethod(Description = "Web 服务提供的方法,返回给定文件类型。")]
    public string GetimageType()
    {
        ///这里只是测试,您可以根据实际的文件类型进行动态输出
        return "image/jpg";
    }
}

/*调用上传*/

string filePath = "c:\test.jpg";
FileStream fs = new FileStream(filePath,FileMode.OpenorCreate,
FileAccess.Read);
// Read the Data into the Byte Array
byte[] fileByte = new byte[fs.Length];
fs.Read(fileByte,(int)fs.Length);

UploadFile uploadfile = new UploadFile(); int indexof = filePath.LastIndexOf(".")+1; string fileExt = filePath.Substring(indexof,filePath.Length - indexof); string filename = uploadfile.Upload(fileByte,fileExt);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐