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 = @"http://10.0.8.52/YuanXinFiles/Office/"; ;//添加一級目錄string relativeOneUrl = DateTime.Now.Year.ToString();completeUrl += "http://" + relativeOneUrl;relativeUrl += "http://" + relativeOneUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}//添加二級目錄string relativeTwoUrl = DateTime.Now.Month.ToString();completeUrl += "http://" + relativeTwoUrl;relativeUrl += "http://" + 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 + "http://" + fileName);}
B-APP:
前端頁面長什么樣不管了,后臺拿到的是base64的字符串集合.
1-保存示例:
#region 創建目錄//完整存儲路徑string completeUrl = "";//相對等級路徑string relativeUrl = "";//string saveTempPath = "~/Resources/Pic";//string picUploadPath = HttpContext.Current.Server.MapPath(saveTempPath);//添加根目錄completeUrl = @"http://10.0.8.52/YuanXinFiles/Office/"; ;//添加一級目錄string relativeOneUrl = DateTime.Now.Year.ToString();completeUrl += "http://" + relativeOneUrl;relativeUrl += "http://" + relativeOneUrl;if (!Directory.Exists(completeUrl)){Directory.CreateDirectory(completeUrl);}//添加二級目錄string relativeTwoUrl = DateTime.Now.Month.ToString();completeUrl += "http://" + relativeTwoUrl;relativeUrl += "http://" + 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 + "http://" + 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 = @"http://" + 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)保存及 跨域上傳說明,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!
新聞熱點
疑難解答