C#图片上传教程:PC与APP跨域实现

11 下载量 146 浏览量 更新于2024-09-03 收藏 117KB PDF 举报
"C#实现图片上传(PC端和APP)保存及跨域上传说明" 本文将详细介绍如何在C#环境中实现图片的上传功能,适用于PC端和移动应用(APP),并涵盖跨域上传的处理。首先,我们关注PC端的图片上传流程。 在PC端,用户通常通过Web界面进行图片上传。在HTML页面中,我们可以设置一个`<input>`标签来允许用户选择文件。例如,使用`type="file"`属性指定为文件上传,加上`multiple`属性则可以让用户选择多张图片: ```html <input id="BusRoute" type="file" class="btn btn-default btn-lg" style="height:34px;padding-top:5px;padding-bottom:5px;" multiple/> ``` 当用户选择文件后,这些文件会被发送到服务器端。在C#的后台代码中,可以通过`HttpContext.Current.Request.Files`来获取上传的文件集合。`HttpFileCollection`对象包含了所有上传的文件信息。 ```csharp HttpFileCollection pcFileColl = HttpContext.Current.Request.Files; ``` 接下来是保存上传图片的步骤。这里提供了一个示例,展示了如何创建存储路径,并将图片保存到服务器的特定目录。首先,定义完整的存储路径和相对路径: ```csharp string completeUrl = ""; string relativeUrl = ""; ``` 然后,可以设定一个基础的保存路径,比如`~/Resources/Pic`,并将其映射到服务器的实际路径: ```csharp string saveTempPath = "~/Resources/Pic"; string picUploadPath = HttpContext.Current.Server.MapPath(saveTempPath); ``` 为了更好地组织存储,我们可以按照年和月创建二级目录结构: ```csharp completeUrl = @"\\10.0.8.52\YuanXinFiles\Office\"; // 添加根目录 completeUrl += "\\" + DateTime.Now.Year.ToString(); // 添加一级目录(年) completeUrl += "\\" + DateTime.Now.Month.ToString(); // 添加二级目录(月) relativeUrl += "\\" + DateTime.Now.Year.ToString(); relativeUrl += "\\" + DateTime.Now.Month.ToString(); // 检查并创建目录 if (!Directory.Exists(completeUrl)) { Directory.CreateDirectory(completeUrl); } ``` 在创建了目录之后,可以遍历`HttpFileCollection`,将每个文件保存到服务器: ```csharp foreach (HttpPostedFileBase file in pcFileColl) { if (file.ContentLength > 0) { string fileName = Path.GetFileName(file.FileName); file.SaveAs(Path.Combine(completeUrl, fileName)); // 可以在此处保存文件相对URL到数据库,供后续使用 } } ``` 至于跨域上传,这是在Web开发中常见的需求,主要用于允许来自不同源的请求访问服务器资源。在C#中,可以通过设置ASP.NET MVC或Web API的响应头来允许跨域请求。例如,在控制器的`HttpGet`或`HttpPost`方法中添加以下代码: ```csharp Response.AppendHeader("Access-Control-Allow-Origin", "*"); Response.AppendHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE"); Response.AppendHeader("Access-Control-Allow-Headers", "Content-Type"); ``` 或者,如果你使用的是Web API,可以在Global.asax.cs的`Application_BeginRequest`事件中全局设置: ```csharp protected void Application_BeginRequest(object sender, EventArgs e) { if (HttpContext.Current.Request.Headers["Origin"] != null) { HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept"); if (HttpContext.Current.Request.HttpMethod == "OPTIONS") { HttpContext.Current.Response.End(); } } } ``` 以上就是C#实现图片上传(PC端和APP)以及跨域上传的基本步骤和注意事项。在实际项目中,你可能还需要处理其他细节,如错误处理、文件类型检查、大小限制等。确保安全性和性能优化也是至关重要的。