using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Web; using VRS.Util; namespace VRS.Handler { /// /// CosFiles 的摘要说明 /// public class CosFiles : BaseHandler, IHttpHandler { public void ProcessRequest(HttpContext context) { if (HasFile(context)) { var file = UploadDefaultFile(context); var extension = file.FileName.Substring(file.FileName.LastIndexOf('.')); //var ext = ".data"; var ext = extension; if (file.ContentLength > 0) { byte[] buffer = new byte[5 * 1024 * 1024]; int actual = 0; Stopwatch sw1 = new Stopwatch(); //开始计时 sw1.Start(); //先保存到内存流中MemoryStream MemoryStream ms = new MemoryStream(); while ((actual = file.InputStream.Read(buffer, 0, 5 * 1024 * 1024)) > 0) { ms.Write(buffer, 0, actual); } ms.Position = 0; //再从内存流中读取到byte数组中 buffer = ms.ToArray(); sw1.Stop(); //获取运行时间[毫秒] var ElapsedMilliseconds1 = sw1.ElapsedMilliseconds; BasePage.write_log("字节转化毫米:" + ElapsedMilliseconds1); var type = "upload"; string appid = "1300932214"; string region = "ap-nanjing"; //地域 string buket_name = "lzy";//lzy var originalName = file.FileName; var index = originalName.LastIndexOf("."); var extend = originalName.Substring(index + 1); CosClient client = new CosClient(appid, region); string file_name = BasePage.GetRoomNo() + "." + extend; Stopwatch sw3 = new Stopwatch(); //开始计时 sw3.Start(); var src = client.UploadFile(buket_name, "/" + type + "/" + file_name, buffer); sw3.Stop(); //获取运行时间[毫秒] var times3 = sw3.ElapsedMilliseconds; BasePage.write_log("上传cos毫秒:" + times3); if (src.Code == 200) { var download_url = "https://" + buket_name + "-" + appid + ".cos." + region + ".myqcloud.com/" + type + "/" + file_name; var result = GetResult(true, download_url, "上传成功!"); context.Response.Write(result); context.Response.End(); } else { var result = GetResult(false, null, "上传失败,原因:" + src.Message); context.Response.Write(result); context.Response.End(); } } } var end = GetResult(false, null, "文件不存在"); context.Response.Write(end); context.Response.End(); } /// /// 异步完成上传COS /// /// void UploadAsync(IAsyncResult obj) { PostedFile postedFile = (PostedFile)obj.AsyncState; try { /* CosClass2 cosClass = new CosClass2(ConfigurationManager.AppSettings["Protocol"], ConfigurationManager.AppSettings["Bucket"], ConfigurationManager.AppSettings["Region"], ConfigurationManager.AppSettings["SecretId"], ConfigurationManager.AppSettings["SecretKey"]); postedFile.url = cosClass.Upload(string.Format("/{0}", postedFile.fileName), postedFile.postArray); */ var type = "upload"; string appid = "1300932214"; string region = "ap-nanjing"; //地域 string buket_name = "lzy";//lzy CosClient client = new CosClient(appid, region); Stopwatch sw3 = new Stopwatch(); //开始计时 sw3.Start(); long times3 = 0; var originalName = postedFile.fileName; var index = originalName.LastIndexOf("."); var prefix = originalName.Substring(0, index); var extend = originalName.Substring(index+1); var bytes = postedFile.postArray; string file_name = BasePage.GetRoomNo() +"."+ extend; var src = client.UploadFile(buket_name, "/" + type + "/" + file_name, bytes); //结束计时 sw3.Stop(); if (src.Code == 200) { var download_url = "https://" + buket_name + "-" + appid + ".cos." + region + ".myqcloud.com/" + type + "/" + file_name; postedFile.state = 1; postedFile.url = download_url; } else { postedFile.state = 2; postedFile.message = "上传失败,原因:" + src.Message; } } catch(Exception ex) { postedFile.state = 2; postedFile.message = "上传失败,原因:" + ex.Message; } } public class PostedFile { public string fileName; public byte[] postArray; public string url; public int state; /// /// 消息 /// public string message; } public bool IsReusable { get { return false; } } /// /// 获取GUID /// /// protected string GetGuid() { return Guid.NewGuid().ToString(); } /// /// 是否有上传文件 /// /// protected bool HasFile(HttpContext context) { return context.Request.Files.Count > 0; } /// /// 上传文件集合 /// /// protected HttpFileCollection UploadFiles(HttpContext context) { if (context.Request.Files.Count > 0) return context.Request.Files; else return null; } /// /// 获取上传默认文件(第1个文件) /// /// 如果不存在则返回null protected HttpPostedFile UploadDefaultFile(HttpContext context) { var collection = UploadFiles(context); if (null == collection) return null; else return collection[0]; } /// /// 返回上传文件集合 /// /// 如果不存在则返回null protected HttpFileCollection UpLoadFileCollection(HttpContext context) { var collection = UploadFiles(context); if (null == collection) return null; else return collection; } /// /// 获取上传默认文件(第1个文件) /// /// 如果不存在则返回null protected HttpPostedFile UploadDefaultFile(HttpContext context,out string fileName) { fileName = ""; var defaultFile = UploadDefaultFile(context); if (null == defaultFile) { return null; } else { fileName = defaultFile.FileName; return defaultFile; } } } }