A-PC端:
1-页面--multiple是控制单张还是多张图片上传
<input id="BusRoute" type="file" class="btn btn-default btn-lg" style="height:34px;padding-top:5px;padding-bottom:5px;" multiple />
2-后台获取图片文件:
HttpFileCollection pcFileColl = HttpContext.Current.Request.Files;
3-保存示例:
#region 创建目录//完整存储路径string completeUrl = "";//相对等级路径string relativeUrl = "";//string saveTempPath = "~/Resources/Pic";//string picUploadPath = HttpContext.Current.Server.MapPath(saveTempPath);//添加根目录completeUrl = @"//10.0.8.52/YuanXinFiles/Office/"; ;//添加一级目录string relativeOneUrl = DateTime.Now.Year.ToString();completeUrl += "//" + relativeOneUrl;relativeUrl += "//" + relativeOneUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}//添加二级目录string relativeTwoUrl = DateTime.Now.Month.ToString();completeUrl += "//" + relativeTwoUrl;relativeUrl += "//" + relativeTwoUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}#endregion//保存HttpFileCollection picColl = picModel.PcFileColl;for (var i = 0; i < picColl.Count; i++){HttpPostedFile file = picColl[i];//保存图片//保存至指定目录file.SaveAs(completeUrl + "//" + fileName);}
B-APP:
前端页面长什么样不管了,后台拿到的是base64的字符串集合.
1-保存示例:
#region 创建目录//完整存储路径string completeUrl = "";//相对等级路径string relativeUrl = "";//string saveTempPath = "~/Resources/Pic";//string picUploadPath = HttpContext.Current.Server.MapPath(saveTempPath);//添加根目录completeUrl = @"//10.0.8.52/YuanXinFiles/Office/"; ;//添加一级目录string relativeOneUrl = DateTime.Now.Year.ToString();completeUrl += "//" + relativeOneUrl;relativeUrl += "//" + relativeOneUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}//添加二级目录string relativeTwoUrl = DateTime.Now.Month.ToString();completeUrl += "//" + relativeTwoUrl;relativeUrl += "//" + relativeTwoUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}#endregion //保存byte[] bytes = Convert.FromBase64String(strPic.picCode);MemoryStream memStream = new MemoryStream(bytes);BinaryFormatter binFormatter = new BinaryFormatter();System.Drawing.Bitmap map = new Bitmap(memStream);Image image = (Image)map; string imageName = Guid.NewGuid().ToString("N");//保存图片image.Save(completeUrl + "//" + imageName + "." + strPic.picType); //保存图片
C-跨域保存问题:
跨域的常见场景如下图所示:我们通过电脑的网络影射,连接到所需要的目录,这里添加上拥有权限的人员账号即可访问目标文件夹,那么使用C#代码如何获得访问权限呢?
要获取以上访问权限,需要引用一个类和添加一些简单代码:
1-访问代码:
/// <summary>/// 通过指定用户执行上次图片操作/// </summary>/// <param name="uploadAction"></param>public void UploadFileByUser(Action uploadAction){//参考类:D:/SourceCode/MCSFramework/02.Develop/MobileWebApp/YuanXin/Services/FileUploadService/Controllers/UploadController.cs//无法通过权限认证--只能通过外网访问try{var ip = "10.0.8.52";var domain = "sinooceanland";var username = ConfigurationManager.AppSettings["uploadUserName"].ToString(); //配置的用户名var pwd = ConfigurationManager.AppSettings["uploadPassword"].ToString(); //配置的密码var root = ConfigurationManager.AppSettings["uploadRootPath"].ToString(); //配置的文件根路径using (NetworkShareAccesser.Access(ip, domain, username, pwd)) //建立连接{uploadAction(); //图片保存代码}}catch (System.Exception e){}}
2-必须类:
public class NetworkShareAccesser : IDisposable{private string _remoteUncName;private string _remoteComputerName;public string RemoteComputerName{get{return this._remoteComputerName;}set{this._remoteComputerName = value;this._remoteUncName = @"//" + this._remoteComputerName;}}public string UserName{get;set;}public string Password{get;set;}#region Constsprivate const int RESOURCE_CONNECTED = 0x00000001;private const int RESOURCE_GLOBALNET = 0x00000002;private const int RESOURCE_REMEMBERED = 0x00000003;private const int RESOURCETYPE_ANY = 0x00000000;private const int RESOURCETYPE_DISK = 0x00000001;private const int RESOURCETYPE_PRINT = 0x00000002;private const int RESOURCEDISPLAYTYPE_GENERIC = 0x00000000;private const int RESOURCEDISPLAYTYPE_DOMAIN = 0x00000001;private const int RESOURCEDISPLAYTYPE_SERVER = 0x00000002;private const int RESOURCEDISPLAYTYPE_SHARE = 0x00000003;private const int RESOURCEDISPLAYTYPE_FILE = 0x00000004;private const int RESOURCEDISPLAYTYPE_GROUP = 0x00000005;private const int RESOURCEUSAGE_CONNECTABLE = 0x00000001;private const int RESOURCEUSAGE_CONTAINER = 0x00000002;private const int CONNECT_INTERACTIVE = 0x00000008;private const int CONNECT_PROMPT = 0x00000010;private const int CONNECT_REDIRECT = 0x00000080;private const int CONNECT_UPDATE_PROFILE = 0x00000001;private const int CONNECT_COMMANDLINE = 0x00000800;private const int CONNECT_CMD_SAVECRED = 0x00001000;private const int CONNECT_LOCALDRIVE = 0x00000100;#endregion#region Errorsprivate const int NO_ERROR = 0;private const int ERROR_ACCESS_DENIED = 5;private const int ERROR_ALREADY_ASSIGNED = 85;private const int ERROR_BAD_DEVICE = 1200;private const int ERROR_BAD_NET_NAME = 67;private const int ERROR_BAD_PROVIDER = 1204;private const int ERROR_CANCELLED = 1223;private const int ERROR_EXTENDED_ERROR = 1208;private const int ERROR_INVALID_ADDRESS = 487;private const int ERROR_INVALID_PARAMETER = 87;private const int ERROR_INVALID_PASSWORD = 1216;private const int ERROR_MORE_DATA = 234;private const int ERROR_NO_MORE_ITEMS = 259;private const int ERROR_NO_NET_OR_BAD_PATH = 1203;private const int ERROR_NO_NETWORK = 1222;private const int ERROR_BAD_PROFILE = 1206;private const int ERROR_CANNOT_OPEN_PROFILE = 1205;private const int ERROR_DEVICE_IN_USE = 2404;private const int ERROR_NOT_CONNECTED = 2250;private const int ERROR_OPEN_FILES = 2401;#endregion#region PInvoke Signatures[DllImport("Mpr.dll")]private static extern int WNetUseConnection(IntPtr hwndOwner,NETRESOURCE lpNetResource,string lpPassword,string lpUserID,int dwFlags,string lpAccessName,string lpBufferSize,string lpResult);[DllImport("Mpr.dll")]private static extern int WNetCancelConnection2(string lpName,int dwFlags,bool fForce);[StructLayout(LayoutKind.Sequential)]private class NETRESOURCE{public int dwScope = 0;public int dwType = 0;public int dwDisplayType = 0;public int dwUsage = 0;public string lpLocalName = "";public string lpRemoteName = "";public string lpComment = "";public string lpProvider = "";}#endregion/// <summary>/// Creates a NetworkShareAccesser for the given computer name. The user will be promted to enter credentials/// </summary>/// <param name="remoteComputerName"></param>/// <returns></returns>public static NetworkShareAccesser Access(string remoteComputerName){return new NetworkShareAccesser(remoteComputerName);}/// <summary>/// Creates a NetworkShareAccesser for the given computer name using the given domain/computer name, username and password/// </summary>/// <param name="remoteComputerName"></param>/// <param name="domainOrComuterName"></param>/// <param name="userName"></param>/// <param name="password"></param>public static NetworkShareAccesser Access(string remoteComputerName, string domainOrComuterName, string userName, string password){return new NetworkShareAccesser(remoteComputerName,domainOrComuterName + @"/" + userName,password);}/// <summary>/// Creates a NetworkShareAccesser for the given computer name using the given username (format: domainOrComputername/Username) and password/// </summary>/// <param name="remoteComputerName"></param>/// <param name="userName"></param>/// <param name="password"></param>public static NetworkShareAccesser Access(string remoteComputerName, string userName, string password){return new NetworkShareAccesser(remoteComputerName,userName,password);}private NetworkShareAccesser(string remoteComputerName){RemoteComputerName = remoteComputerName;this.ConnectToShare(this._remoteUncName, null, null, true);}private NetworkShareAccesser(string remoteComputerName, string userName, string password){RemoteComputerName = remoteComputerName;UserName = userName;Password = password;this.ConnectToShare(this._remoteUncName, this.UserName, this.Password, false);}private void ConnectToShare(string remoteUnc, string username, string password, bool promptUser){NETRESOURCE nr = new NETRESOURCE{dwType = RESOURCETYPE_DISK,lpRemoteName = remoteUnc};int result;if (promptUser){result = WNetUseConnection(IntPtr.Zero, nr, "", "", CONNECT_INTERACTIVE | CONNECT_PROMPT, null, null, null);}else{result = WNetUseConnection(IntPtr.Zero, nr, password, username, 0, null, null, null);}if (result != NO_ERROR){throw new Win32Exception(result);}}private void DisconnectFromShare(string remoteUnc){int result = WNetCancelConnection2(remoteUnc, CONNECT_UPDATE_PROFILE, false);if (result != NO_ERROR){throw new Win32Exception(result);}}/// <summary>/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources./// </summary>/// <filterpriority>2</filterpriority>public void Dispose(){this.DisconnectFromShare(this._remoteUncName);}}
以上所述是小编给大家介绍的C#实现图片上传(PC端和APP)保存及 跨域上传说明,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!
新闻热点
疑难解答