ASP.NET 上传图片到FTP

目录:

  代码,参考资料,IIS环境FTP配置,vs2013 IIS Express虚拟目录

1. 项目介绍

建立FTP文件服务器与应用程序分开(猜测提高IIS性能) .

下面方法中的参数为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, 190, 140);
                /// 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, 0, 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, 0, bytes.Length);

            // 设置当前流的位置为流的开始
            stream.Seek(0, 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, 0, bytes.Length);
            // 设置当前流的位置为流的开始
            stream.Seek(0, 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, 0, 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, 190, 140);
                bitNewPic.Save(imagename, System.Drawing.Imaging.ImageFormat.Jpeg);
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

    }
时间: 2024-10-05 03:02:08

ASP.NET 上传图片到FTP的相关文章

asp.net上传图片并同时生成缩略图

<script language="VB" runat="server"> Sub UploadFile(sender As Object, e As EventArgs) If FileUp.PostedFile.ContentLength = 0 Then FileInfo.Visible = False Exit Sub Else FileInfo.Visible = True FDisplay1.Visible = True End If FSi

Java上传图片到Ftp,包含上传后文件大小为0的问题和Properties配置文件的读取

准备工作:需要使用coomos-net jar包.下载地址 一. 上传图片到FTP,文件大小为0的问题,解决:将ftp模式修改为Passive模式就可以了. //将ftp模式修改为Passive模式 ftpClient.enterLocalPassiveMode(); 二.配置文件的操作,具体介绍请看Java中Properties类的用法总结 1.使用.properties配置文件的形式定义相关常量. 2.在工具类中导入配置文件 private static Properties getFtpC

ASP + ACCESS 上传图片到数据库与将图片读出数据库显示之实现(详细版)

ASP上传图片至数据库内功能的实现 一般的无组件上传类,其上传过程是将图片先保存到指定文件夹,与此同时将该路径保存至数据库字段的.显示图片则是根据数据库表中的路径字段对应显示的.当然有关图片的管理,比如删除:只删除了路径,实际的图片需要根据该路径通过FSO进行删除--那有没有这样一种情况:将图片直接作为一个字段的值保存.对图片的操作就象是对数据字段的操作一样熟练.答案是肯定的,只是将该字段的类型设为OLE对象 知识点:OLE 对象字段用来存储诸如 Microsoft Word 或 Microso

ASP.NET中使用FTP

可以做个类: 1 #region FTP 2 3 string ftpServerIP; // FTP服务器的地址 4 string ftpRemotePath; // FTP目录 5 string ftpUserID; // FTP用户ID 6 string ftpPassword; // FTP密码 7 string ftpURI; // FTP URI 8 9 /// <summary> 10 /// 连接FTP 11 /// </summary> 12 /// <pa

ASP.NET - 上传图片方法(单张)

/// <summary> /// 上传图片 /// </summary> /// <param name="fileupload">上传的控件</param> /// <param name="folder">要存储的文件夹(要在服务器已经存在)</param> /// <param name="imageName">图片名称</param> ///

asp.net上传图片,上传图片

想必很多人工作中经常需要实现上传图片的功能. 先引用此插件 http://files.cnblogs.com/files/hmYao/jquery-form.js. 前台代码 <form data-ajax-success="AfterUpload" enctype="multipart/form-data" id="frm"> <input type="file" name="fileBase&q

asp.net上传图片文件自动修改图片大小代码

#region 图片缩放 /// <summary> /// 图片缩放 /// </summary> /// <param name="savePath">图片相对路径</param> /// <param name="fileName">图片名称</param> /// <param name="destWidth">缩放宽度</param> ///

Net实现上传图片按比例自动缩小或放大的方法

本文实例主要展示了.Net实现上传图片按比例自动缩小或放大的方法,是非常实用的功能.分享给大家供大家参考之用.具体方法如下: net实现裁剪网站上传图片的方法 .net中 发送邮件内容嵌入图片的具体实例 vb.net借助剪贴板将图片导入excel内 asp.net图片上传实例 ASP.net WebAPI 上传图片实例 .Net下二进制形式的文件(图片)的存储与读取详细解析 Asp.net图片上传实现预览效果的简单代码 asp.net上传图片并作处理水印与缩略图的实例代码 asp.net 图片超

C#源码500份

C#源码500份 C Sharp  短信发送平台源代码.rar http://1000eb.com/5c6vASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jcC# Winform qq弹窗 360弹窗 http://1000eb.com/89jf精华志 C#高级编程(第七版)源码 http://1000eb.com/89k3C#网络应用编程教案及代码.rar http://1000eb.com/89khIPhone远程桌面xp控制+Desktop+Conne