using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Net;
using SuperMap.RealEstate.Utility;
namespace SuperMap.RealEstate.HousingSecurity.APIPlugs.flashuploader
{
public class MyUpFileInfo
{
//hzz:
//转换 HttpPostedFileBase filebase = new HttpPostedFileWrapper(HttpPostedFile);
//
private HttpPostedFileBase _httpPostedFile;
public HttpPostedFileBase HttpPostedFileBase
{
get { return _httpPostedFile; }
}
///
/// 直接用对应数据库的表进行构造,方便处理
///
///
public MyUpFileInfo(t_upfilesInfo entity)
{
_Entity = entity;
}
//public UpFileInfo(HttpPostedFileBase postfile, int userid)
//{
// string _md5 = GetMD5_32(postfile.InputStream);
// string _ext = Path.GetExtension(postfile.FileName).ToLower();
// string _usergroup = GetMD5_32(userid.ToString()).Substring(0, 2); //按用户HASH分组(00-ff)
// _Entity = new t_upfilesInfo();
// _Entity.md5 = _md5;
// _Entity.fileext = _ext;
// _Entity.mimetype = postfile.ContentType;
// _Entity.filesize = postfile.ContentLength;
// _Entity.filename = postfile.FileName;
// //Init(postfile, userid);
//}
public MyUpFileInfo(HttpPostedFileBase postfilebase, int userid, bool isnews = false)
{
Init(postfilebase, userid, isnews);
}
public MyUpFileInfo(HttpPostedFile postfile, int userid, bool isnews = false)
{
Init(new HttpPostedFileWrapper(postfile), userid, isnews);
}
public MyUpFileInfo(HttpWebResponse webfile, byte[] bytes, int userid)
{
Init(webfile, bytes, userid);
}
private static string[] filetype_img = { ".gif", ".png", ".jpg", ".jpeg", ".bmp" };
private static string[] filetype_file = { ".rar", ".doc", ".docx", ".zip", ".pdf", ".txt" };
private static string[] filetype_flv = { ".swf", ".mp3", ".mp4", ".flv", ".wmv", ".rmvb", ".mkv" };
public void Init(HttpPostedFileBase postfile, int userid, bool isnews = false)
{
this._httpPostedFile = postfile;
string _md5 = GetMD5_32(postfile.InputStream);
string _ext = Path.GetExtension(postfile.FileName).ToLower();
string _usergroup = userid.ToEncrypt(); //GetMD5_32(userid.ToString());//.Substring(0, 2); //按用户HASH分组(00-ff)
_Entity = new t_upfilesInfo();
_Entity.md5 = _md5;
_Entity.filetime = DateTime.Now.ToFileTime().ToString();
_Entity.fileext = _ext;
_Entity.mimetype = postfile.ContentType;
_Entity.filesize = postfile.ContentLength;
_Entity.filename = postfile.FileName;
//_Entity.tags = postfile.ContentType;
//_Entity.intro = postfile.ContentType;
//服务端路径和文件名设定
_Entity.serverfilename = _Entity.filetime + _ext;
//_Entity.serverfilename = _md5 + _ext;
if (isnews)
{
//新闻目录
if (filetype_img.Contains(_ext))
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/news/img/");
}
else if (filetype_flv.Contains(_ext))
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/news/flv/");
}
else
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/news/file/");
}
}
else
{
//统一的文件目录(用于房源图片)
if (filetype_img.Contains(_ext))
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/img/{0}/", _usergroup);
}
else if (filetype_flv.Contains(_ext))
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/flv/{0}/", _usergroup);
}
else
{
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/file/{0}/", _usergroup);
}
}
_Entity.serverAllPhysicalPath = ServerFullSavePathAndFileNameExt;
}
public void Init(HttpWebResponse webfile, byte[] bytes, int userid)
{
string _remoteUrl = webfile.ResponseUri.ToString();
string _md5 = GetMD5_32(new MemoryStream(bytes));
string _ext = Path.GetExtension(_remoteUrl).ToLower();
string _usergroup = userid.ToEncrypt();//GetMD5_32(userid.ToString()); //按用户HASH分组(00-ff)
_Entity = new t_upfilesInfo();
_Entity.md5 = _md5;
_Entity.filetime = DateTime.Now.ToFileTime().ToString();
_Entity.fileext = _ext;
_Entity.mimetype = webfile.ContentType;
_Entity.filesize = Convert.ToInt32(webfile.ContentLength);
_Entity.filename = Path.GetFileName(_remoteUrl);
//服务端路径和文件名设定
_Entity.serverfilename = _Entity.filetime + _ext;
_Entity.serverpath = string.Format("/Temporary/HousingSecurity/web/{0}/", _usergroup);
}
public string GetUri()
{
//int fid
return (this._Entity.serverpath + _Entity.filetime + _Entity.fileext).Replace("\\", "/");
}
private t_upfilesInfo _Entity;
///
/// 数据库对应的文件记录信息
///
public t_upfilesInfo Entity
{
get { return _Entity; }
set { _Entity = value; }
}
///
/// 服务器完整物理路径,包含盘符(仅完整物理路径)
/// 格式:E:\01_MyWorks\left9_2013\src\Hzz.WebSite\upload\img\201306\c4\
///
///
public string ServerFullSavePath
{
get
{
return System.Web.HttpContext.Current.Server.MapPath("~" + _Entity.serverpath);
}
}
///
/// 服务器完整存储路径(完整物理路径+文件名)
/// 格式:E:\01_MyWorks\left9_2013\src\Hzz.WebSite\upload\img\201306\c4\0f28df94d0f9cd42.jpg
///
public string ServerFullSavePathAndFileNameExt
{
get
{
return ServerFullSavePath + ServerSaveFileName;
}
}
///
/// 服务器保存路径(相对路径)
/// 格式:/upload/img/201306/c4/
///
public string ServerSavePath
{
get
{
return _Entity.serverpath;
}
}
///
/// 服务器保存文件名(md5 hash后基本唯一)
/// 0f28df94d0f9cd42.jpg
///
public string ServerSaveFileName
{
get
{
return _Entity.serverfilename;
}
}
/////
///// 访问的参考URL
///// 格式:/upload/img/{00-ff}/{md5}.abc
/////
//public string PreviewUri
//{
// get
// {
// return this._Entity.serverpath + _Entity.md5 + _Entity.fileext;
// }
//}
/////
///// 新的文件名+文件后缀
/////
//public string Uri_FileName
//{
// get
// {
// return _Entity.md5 + _Entity.fileext;
// }
//}
private static string GetMD5_32(Stream stream)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
string resule = BitConverter.ToString(md5.ComputeHash(stream));
return resule.Replace("-", "").ToLower();
}
private static string GetMD5_32(string str)
{
System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
string resule = BitConverter.ToString(md5.ComputeHash(System.Text.UTF8Encoding.Default.GetBytes(str)));
return resule.Replace("-", "").ToLower();
}
public byte[] GetPicBlob(string PicPath)
{
FileStream fs = new FileStream(PicPath, FileMode.Open);
byte[] byDate = new byte[fs.Length];
fs.Read(byDate, 0, byDate.Length);
fs.Close();
return byDate;
}
}
}