C# winform 上传文件、图片

方案一:

注意:要开启虚拟目录的“写入”权限,要不然就报 403 错误

工作中用到winform上传文件(-_-!,很少用winform,搞了半天)
碰到一点问题,解决如下
1、501 为实现错误
解决方法:
先把IISWEB服务扩展中的WebDev打开
然后
IIS站点添加MIME txt类型 常见的MIME类型如下
超文本标记语言文本 .html,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
再然后
设置目标文件夹的可写性

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;

namespace Common
{
/**
/// winform形式的文件传输类
///
public class WinFileTransporter
{
/**
/// WebClient上传文件至服务器,默认不自动改名
///
/// 文件名,全路径格式
/// 服务器文件夹路径
public void UpLoadFile(string fileNamePath, string uriString)
{
UpLoadFile(fileNamePath, uriString, false);
}
/**
/// WebClient上传文件至服务器
///
/// 文件名,全路径格式
/// 服务器文件夹路径
/// 是否自动按照时间重命名
public void UpLoadFile(string fileNamePath, string uriString, bool IsAutoRename)
{
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf(“\”) + 1);
string NewFileName = fileName;
if (IsAutoRename)
{
NewFileName = DateTime.Now.ToString(“yyMMddhhmmss”) + DateTime.Now.Millisecond.ToString() + fileNamePath.Substring(fileNamePath.LastIndexOf(“.”));
}

string fileNameExt = fileName.Substring(fileName.LastIndexOf(“.”) + 1);
if (uriString.EndsWith(“/”) == false) uriString = uriString + “/”;

        uriString = uriString + NewFileName;
        Utility.LogWriter log = new Utility.LogWriter();

//log.AddLog(uriString, “Log”);
//log.AddLog(fileNamePath, “Log”);
////
/** 创建WebClient实例
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials;
// 要上传的文件
FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
//FileStream fs = OpenFile();
BinaryReader r = new BinaryReader(fs);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(uriString, “PUT”);

try
{

//使用UploadFile方法可以用下面的格式
//myWebClient.UploadFile(uriString,”PUT”,fileNamePath);

if (postStream.CanWrite)
{
postStream.Write(postArray, 0, postArray.Length);
postStream.Close();
fs.Dispose();
log.AddLog(“上传日志文件成功!”, “Log”);
}
else
{
postStream.Close();
fs.Dispose();
log.AddLog(“上传日志文件失败,文件不可写!”, “Log”);
}

        }

catch (Exception err)
{
postStream.Close();
fs.Dispose();
//Utility.LogWriter log = new Utility.LogWriter();
log.AddLog(err, “上传日志文件异常!”, “Log”);
throw err;
}
finally
{
postStream.Close();
fs.Dispose();
}
}

////
/**
/// 下载服务器文件至客户端

///
/// 被下载的文件地址,绝对路径
/// 另存放的目录
public void Download(string URL, string Dir)
{
WebClient client = new WebClient();
string fileName = URL.Substring(URL.LastIndexOf(“\”) + 1); //被下载的文件名

string Path = Dir + fileName; //另存为的绝对路径+文件名
Utility.LogWriter log = new Utility.LogWriter();
try
{
WebRequest myre = WebRequest.Create(URL);
}
catch (Exception err)
{
//MessageBox.Show(exp.Message,”Error”);
log.AddLog(err, “下载日志文件异常!”, “Log”);
}

try
{
client.DownloadFile(URL, fileName);
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] mbyte = r.ReadBytes((int)fs.Length);

            FileStream fstr = new FileStream(Path, FileMode.OpenOrCreate, FileAccess.Write);

            fstr.Write(mbyte, 0, (int)fs.Length);
            fstr.Close();

        }

catch (Exception err)
{
//MessageBox.Show(exp.Message,”Error”);
log.AddLog(err, “下载日志文件异常!”, “Log”);
}
}

}

}

方案二:

转:http://blog.csdn.net/walkinhill/archive/2004/08/28/87656.aspx

相信用ASP.NET写一个上传文件的网页,大家都会写,但是有没有人想过通过在WinForm中通过HTTP协议上传文件呢?

有些人说要向服务器端上传文件,用FTP协议不是很简单吗?效率又高,为什么还要使用HTTP协议那么麻烦呢?这里面有几个原因:

(1)FTP服务器的部署相对麻烦,还要设置权限,权限设置不对,还会惹来一系列的安全问题。

(2)如果双方都还有防火墙,又不想开发FTP相关的一些端口时,HTTP就会大派用场,就像WEB Services能穿透防火墙一样。

(3)其他的…,还在想呢…

但是使用HTTP也有他的一些问题,例如不能断点续传,大文件上传很难,速度很慢,所以HTTP协议上传的文件大小不应该太大。

说了这么多,原归正传,一般来说,在Winform里通过HTTP上传文件有几种可选的方法:

(1)前面提到的Web Services,就是一种很好的方法,通过编写一个WebMethod,包含有 byte[] 类型的参数,然后调用Web Services的方法,文件内容就会以Base64编码传到服务器上,然后重新保存即可。

[WebMethod]
public void UploadFile(byte[] content,string filename){
Stream sw = new StreamWriter(…);
sw.Close();
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值