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 ...
随机推荐
- linux学习3(vim)
一.文档编辑 1. vi和vim命令 Vim的打开文件的方式(4种,要求掌握的就前三种): 1. vim 文件路径 ...
- Go语言基础之20--web编程框架之Gin框架
一.Gin框架介绍 1.1 简介 A. 基于httprouter开发的web框架. http://github.com/julienschmidt/httprouter B. 提供Martini风格的 ...
- docker(4)使用Dockerfile文件创建镜像-对docker(3)的改进
在<docker(3)docker下的centos7下安装jdk>中,当进入容器后,执行 java命令 不能运行,需要执行source /etc/profile才能执行.如果采用Docke ...
- Ubuntu14.04配置python接口,测试的小问题
当遇到“ImportError:No module named google.protobuf.internal”(import enum_type_wrapper)的问题时候 solution: P ...
- SpringMVC中的视图和视图解析器
对于控制器的目标方法,无论其返回值是String.View.ModelMap或是ModelAndView,SpringMVC都会在内部将它们封装为一个ModelAndView对象进行返回. Spri ...
- Jquery 获取table中的td元素的值
<table id="t1"> <tr> <td> 1-1 </td> <td> 1-2 </td> < ...
- 几种常见的排序算法Java实现总结
public class MySort { final int MAX=20; int num[]=new int[MAX]; { System.out.print("生成的随机数组是:&q ...
- netty之==TCP粘包/拆包问题解决之道(一)
一.TCP粘包/拆包是什么 TCP是一个“流”协议,所谓流,就是没有界限的一长串二进制数据.TCP作为传输层协议并不不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分,所以在 ...
- [转]png图片压缩大小但是不改变透明部分
降低PNG图片存储大小方法,图片压缩方法,如何降低PNG图片存储大小?前提是分辨率和尺寸大小不变,图形的透明部分不变.请看如下办法,亲测可用. 1. 将PNG图片用PS打开. 2. 图像-模式-8位/ ...
- Java入门之JDK安装及环境变量配置
一.安装JDK 安装过程中会出现两次安装提示 .第一次是安装 jdk ,第二次是安装 jre .建议两个都安装在同一个java文件夹中的不同文件夹中. (注:若无安装目录要求,可全默认设置.无需做任何 ...