好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#实现图片上传(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 创建目录

//完整存储路径

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 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://HdhCmsTestcnblogs测试数据/lxhbky/archive/2016/12/08/6144172.html

dy("nrwz");

查看更多关于C#实现图片上传(PC端和APP)保存及 跨域上传说明的详细内容...

  阅读:39次