ASP.NET 上传图片到FTP
目录:
2.代码
3.参考资料
4.IIS环境FTP配置
5.使用虚拟目录注意Server.MapPath()
1. 项目介绍
建立FTP文件服务器与应用程序分开.
下面方法中的参数为Stream因为使用的是fineUI,已经将流上传,如果是其他控件,后面有FileStream,Bitmap,byte[]之间的参考资料.
2.测试代码
/// <summary>
/// Bitmap:封装 GDI+ 包含图形图像和其属性的像素数据的位图。 一个 Bitmap 是用来处理图像像素数据所定义的对象。
/// 难点:
/// 1.Stream转Bitmap,压缩图片
/// 2.Bitmap 与 byte[] 转换 (Bitmap转MemoryStream,再通过ms.ToArray()转byte[])
/// 3.创建FTP上载数据流,写入字节数(FTP服务器分IIS级别配置,和应用程序级别配置,两个要一致.安全级别高的使用指定用户,安全低的可以所以用户)
///
/// </summary>
/// <param name="stream">继承抽象类的实例(一般是FileStream,MemoryStream)</param>
/// <param name="url">FTP地址</param>
/// <param name="filename">服务器中的文件名(ftp://192.168.1.127/190_140/636288137130851325admin_Penguins.jpg)</param>
public void SaveStream(Stream stream,string url,string filename)
{
MemoryStream ms = null;
Stream strm = null;
try
{
/// 1.Stream 转成 Bitmap 并压缩图片
Bitmap pimage = new Bitmap(stream);
System.Drawing.Imaging.ImageFormat fromat = pimage.RawFormat;
Bitmap bitNewPic = new Bitmap(pimage, , );
/// 2.Bitmap 转成MemoryStream(继承Stream抽象类)
ms = new MemoryStream();
bitNewPic.Save(ms, fromat);
/// 3.MemoryStream转成byte[]数组 "imagebyte"
byte[] imagebyte = new Byte[ms.Length];
imagebyte = ms.ToArray();
/// 4.创建FTP服务器连接 "reqFTP"
string uri = filename;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential("administrator", "vtlongxing");
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = imagebyte.Length;
/// 5.创建FTP服务器上载数据的流 "strm",并向"strm"写入字节序列
strm = reqFTP.GetRequestStream();
strm.Write(imagebyte, , imagebyte.Length);
}
catch (Exception ex)
{
}
finally
{
/// 6.关闭各"流"
strm.Close();
ms.Close();
stream.Close();
}
}
3.filestream,bety,Bitmap操作参考
http://blog.csdn.net/wangyue4/article/details/6819102
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web; namespace AppBox.CRM.Gift
{
public class ImageHelper
{
//byte[] 转图片
public static Bitmap BytesToBitmap(byte[] Bytes)
{
MemoryStream stream = null;
try
{
stream = new MemoryStream(Bytes);
return new Bitmap((Image)new Bitmap(stream));
}
catch (ArgumentNullException ex)
{
throw ex;
}
catch (ArgumentException ex)
{
throw ex;
}
finally
{
stream.Close();
}
} //图片转byte[]
public static byte[] BitmapToBytes(Bitmap Bitmap)
{
MemoryStream ms = null;
try
{
ms = new MemoryStream();
Bitmap.Save(ms, Bitmap.RawFormat);
byte[] byteImage = new Byte[ms.Length];
byteImage = ms.ToArray();
return byteImage;
}
catch (ArgumentNullException ex)
{
throw ex;
}
finally
{
ms.Close();
}
} /// <summary>
/// 将 Stream 转成 byte[]
/// </summary>
public byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length); // 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin);
return bytes;
} /// <summary>
/// 将 byte[] 转成 Stream
/// </summary>
public Stream BytesToStream(byte[] bytes)
{
Stream stream = new MemoryStream(bytes);
return stream;
} /* - - - - - - - - - - - - - - - - - - - - - - - -
* Stream 和 文件之间的转换
* - - - - - - - - - - - - - - - - - - - - - - - */
/// <summary>
/// 将 Stream 写入文件
/// </summary>
public void StreamToFile(Stream stream, string fileName)
{
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, , bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(, SeekOrigin.Begin); // 把 byte[] 写入文件
FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
} /// <summary>
/// 从文件读取 Stream
/// </summary>
public Stream FileToStream(string fileName)
{
// 打开文件
FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);
// 读取文件的 byte[]
byte[] bytes = new byte[fileStream.Length];
fileStream.Read(bytes, , bytes.Length);
fileStream.Close();
// 把 byte[] 转换成 Stream
Stream stream = new MemoryStream(bytes);
return stream;
}
}
}
4.IIS下FTP配置
(FTP服务器分IIS级别配置,和应用程序级别配置,两个要一致.安全级别高的使用指定用户,安全低的可以所以用户)
http://www.juheweb.com/Tutorials/fwq/windows/335.html
5.虚拟目录 (使用虚拟目录和相对路径要用Server.MapPath())
// <virtualDirectory path="/VImage/" physicalPath="D:\Uploadfile\CRM\Image" /> iis express 配置虚拟目录
string strImagePathV = "~/upimage/";//虚拟目录
string strImagePath190_140V = "~/upimage/190_140/";//虚拟目录
string strPath = Server.MapPath(strImagePathV + fileName);
string strPathchange = Server.MapPath(strImagePath190_140V + fileName);
UploadImage img = new UploadImage();
img.Save(tab1UploadImage.PostedFile.InputStream, strPathchange); public class UploadImage
{
public bool Save(Stream stream, string imagename)
{
try
{
Bitmap pimage = new Bitmap(stream);
Bitmap bitNewPic = new Bitmap(pimage, , );
bitNewPic.Save(imagename, System.Drawing.Imaging.ImageFormat.Jpeg);
return true;
}
catch (Exception ex)
{
return false;
}
} }
ASP.NET 上传图片到FTP的更多相关文章
- Asp.Net 上传图片并生成高清晰缩略图
在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...
- Asp.Net 上传图片并生成高清晰缩略图(转)
在asp.net中,上传图片功能或者是常用的,生成缩略图也是常用的.baidu或者google,c#的方法也是很多的,但是一用却发现缩略图不清晰啊,缩略图片太大之类的事情,下面是我在处理图片上的代码, ...
- ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现
1.uppic.asp:上传图片程序 <% dim rs dim formsize,formdata,bncrlf,divider,datastart,dataend,mydata formsi ...
- 使用asp.net上传图片并且裁剪的方法
工欲善其事,必先利其器,坚持才能更好 这篇文章主要是强调怎么使用asp.net上传图片并且能够裁剪,这个功能主要使用在注册信息的时候需要上传头像并且图片格式很大的时候能够把图片裁剪成更小的图片.下面来 ...
- Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取
准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ...
- 使用ASP.NET上传图片汇总
1 使用标准HTML来进行图片上传 前台代码: <body> <form id="form1" runat="server"> ...
- Asp.net 上传图片添加半透明图片或者文字水印的方法
主要用到System.Drawing 命名空间下的相关类,如Brush.Image.Bitmap.Graphics等等类 Image类可以从图片文件创建Image的实例,Bitmap可以从文件也可以从 ...
- asp.net上传图片到服务器
ASP.NET的FileUpload控件可用于上传文件到服务器.HoverTreeTop新增了一个“阅图”功能,图片就是用FileUpload上传的.阅图功能查看:http://hovertree.c ...
- asp.net上传图片(简单)
FileUpload: protected void UploadButton_Click(object sender, EventArgs e) { : Convert.ToInt64(Reques ...
随机推荐
- vs如何在Windows身份验证下调试Web项目
vs做的Web项目发布到IIS站点后,通常我们还希望利用vs来调试代码.如果Web在IIS中设置成了Windows身份验证,那么我们如何在vs调试的时候,也同样采用Windows身份认证进行调试呢? ...
- 09-排序2 Insert or Merge (25 分)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- maven set MAVEN_OPTS
http://juvenshun.iteye.com/blog/240257 https://docs.alfresco.com/5.1/tasks/alfresco-sdk-install-mave ...
- linux安装php7
之前一直对linux研究的比较少,终于下定决心好好把linux玩一下 首先~我是安装了vm虚拟机,然后使用的是centos7的版本.因为vm不好复制粘贴,故使用了xshell连接了我的linux进行操 ...
- C# 事务提交(非数据库)
.Net 2.0开始支持 static void Main(string[] args) { using (TransactionScope ts = new TransactionScope()) ...
- WEB视频播放器插件,总结
WEB视频播放器插件,总结 2018年07月29日 20:42:11 流光忆莲 阅读数:572更多 个人分类: 推荐文章收藏 以下是关于网页中嵌入视频播放插件的各种资料的总结 基于H5的Vedio ...
- docker基本命令日志
docker run - Run a command in a new container 启动一个新的容器,一般在docker pull之后首次运行此image -i 保持stdout打开 -t 打 ...
- 读书笔记:编程小白的第一本python入门书
书名:编程小白的第一本python入门书 作者:侯爵 出版社/出处:图灵社区 年份:2016年 封面: 感想: 本书短小精悍,精华部分在于给编程小白打了鸡血的同时输出了一种“高效学习法的思想”. 个人 ...
- Modbus协议学习笔记
之前也有写过基于 Modbus 通讯协议的控制远程监控程序,但是由于当时时间赶.人手少(软硬件前后台都是在下一人
- my.宠物升级79级
1.蚌仙子 74级半不到的时候,吃 月华露(500000经验的那种) 吃3个 正好 79级半 我记得 之前 是升满75级 再吃月华露 到79级的时候 经验溢出了.不突破还好,突破的话 宠物就升级了 ...