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 創(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-保存示例:
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 創(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)限的人員賬號即可訪問目標文件夾,那么使用C#代碼如何獲得訪問權(quán)限呢?
要獲取以上訪問權(quán)限,需要引用一個類和添加一些簡單代碼:
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> /// 通過指定用戶執(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)限認證--只能通過外網(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-必須類:
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#實現(xiàn)圖片上傳(PC端和APP)保存及 跨域上傳說明,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/lxhbky/archive/2016/12/08/6144172.html