当前位置:首页 > 通信资讯 > 正文

C#图片上传(c#下载图片到本地)

A-PC端:

1-页面--multiple是控制单张还是多张图片上传

?
1 <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-保存示例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #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-保存示例:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #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#代码如何获得访问权限呢?

C#图片上传(c#下载图片到本地)

要获取以上访问权限,需要引用一个类和添加一些简单代码:

1-访问代码:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 /// <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-必须类:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 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 Consts private 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 Errors private 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)保存及 跨域上传说明,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://www.cnblogs.com/lxhbky/archive/2016/12/08/6144172.html

如果您对该产品感兴趣,请填写办理(客服微信:xiaoxiongyidong)

为您推荐:

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。