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 ...
随机推荐
- [转]SQL truncate 、delete与drop区别
转自: https://www.cnblogs.com/8765h/archive/2011/11/25/2374167.html 相同点: 1.truncate和不带where子句的delete.以 ...
- Jmeter函数引用和函数重定向【转】
在jmeter中的[选项]中选择[函数助手对话框]---这些函数可以高速有效的帮助我们开展自动化编写与校验!!!!!! 如图: 重点!!!本章的侧重点不讲函数的具体使用,函数具体的使用与java类似, ...
- STM32F030 定时器多次溢出才触发中断的问题
前言 最近在调试项目过程中,用了 STM32F030 的定时器 16 作为系统时钟,1ms 触发一次中断,过程中遇到一些值得记录的问题. 记录 STM32F030 中定时器 16 的初始化配置如下 v ...
- C语言编程思想
模块化的思想 模块化程序的特点:单入口.单出口 基本的三种结构:顺序.分支(选择).循环: 这三个基本结构来安排模块执行的步骤: 循环三要素:初值.条件.更新: 面对编程问题:三步走策略(输入+处理+ ...
- [ZJOI2018]历史(LCT)
这篇还发了洛谷题解 [Luogu4338] [BZOJ5212] 题解 题意 给出一棵树,给定每一个点的 \(access\) 次数,计算轻重链切换次数的最大值,带修改. 先考虑不带修改怎么做 假设 ...
- codeforces 985C Liebig's Barrels(贪心)
题目 题意: 有n * k块木板,每个木桶由k木板组成,每个木桶的容量定义为它最短的那块木板的长度. 任意两个木桶的容量v1,v2,满足|v1-v2| <= d. 问n个木桶容量的最大的和为多少 ...
- 互联网开发-web文件上传性能问题
1. 问题描述 文件大小 部署环境 平均上传速度 5M 外网 28s-36s 5M 公司局域内网 秒传,很快 2. 问题分析 在网上搜索“测速网”测试了一下公司外网的带宽情况: 上传带宽 = 1.04 ...
- django中关于静态文件的引入(这边是指边主要是jquery和bootstrap
一. 创建文件夹 首先在项目的根目录中新建一个文件夹,这个文件夹的名称最好以static命名 二. 修改配置 在项目的settings文件中,拉倒最下面,可以看到 STATICFILES_DIR ...
- ubuntu下用apt-get安装lamp缺少mcrypt , curl
用apt-get安装的LAMP环境,但安装magento报没有mcrypt和curl, 解决方法如下: curl安装: sudo apt-get install curl libcurl3 lib ...
- 在MD中使用Emoji
mark语法中支持emoji表情 具体语法是:emoji: 比如我输入 :smile: 就会出现微笑