C#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明
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 創(chuàng)建目錄 //完整存儲路徑 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 創(chuàng)建目錄 //完整存儲路徑 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-跨域保存問題:
跨域的常見場景如下圖所示:我們通過電腦的網(wǎng)絡(luò)影射,連接到所需要的目錄,這里添加上擁有權(quán)限的人員賬號即可訪問目標(biāo)文件夾,那么使用C#代碼如何獲得訪問權(quán)限呢?
要獲取以上訪問權(quán)限,需要引用一個類和添加一些簡單代碼:
1-訪問代碼:
/// <summary> /// 通過指定用戶執(zhí)行上次圖片操作 /// </summary> /// <param name="uploadAction"></param> public void UploadFileByUser(Action uploadAction) { //參考類:D:\SourceCode\MCSFramework\02.Develop\MobileWebApp\YuanXin\Services\FileUploadService\Controllers\UploadController.cs //無法通過權(quán)限認(rèn)證--只能通過外網(wǎng)訪問 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 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#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對我們網(wǎng)站的支持!
上一篇:c# 兩個數(shù)組比較,將重復(fù)部分去掉,返回不重復(fù)部分的實現(xiàn)
欄 目:C#教程
下一篇:C#如何自動識別文件的編碼
本文標(biāo)題:C#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/6104.html
您可能感興趣的文章
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新聞效果的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已安裝軟件變化的方法
- 01-10C#實現(xiàn)多線程下載文件的方法
- 01-10C#實現(xiàn)Winform中打開網(wǎng)頁頁面的方法
- 01-10C#實現(xiàn)遠程關(guān)閉計算機或重啟計算機的方法
- 01-10C#自定義簽名章實現(xiàn)方法
- 01-10C#文件斷點續(xù)傳實現(xiàn)方法
- 01-10winform實現(xiàn)創(chuàng)建最前端窗體的方法


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 04-02jquery與jsp,用jquery
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 01-11ajax實現(xiàn)頁面的局部加載
- 01-10delphi制作wav文件的方法
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10C#中split用法實例總結(jié)
- 01-10使用C語言求解撲克牌的順子及n個骰子