public static bool Upload(string bucketName, string fileName, string fileToUpload) { bool success = false; try { if (!DoesBucketExist(bucketName)) { if (!CreateBucket(bucketName)) { return(success); } } string eTag; using (var fs = File.Open(fileToUpload, FileMode.Open)) { eTag = OssUtils.ComputeContentMd5(fs, fs.Length); } var objectMeta = new ObjectMetadata { ETag = eTag }; var result = ossClient.PutObject(bucketName, fileName, fileToUpload, objectMeta); success = true; } catch (Exception ex) { Console.WriteLine("Put object failed, {0}", ex.Message); } return(success); }
public async Task SaveBlobStreamAsync(string containerName, string blobName, Stream source, BlobProperties properties = null) { try { await Task.Run(() => { var exist = _ossClient.DoesBucketExist(containerName); if (!exist) { _ossClient.CreateBucket(containerName); } var md5 = OssUtils.ComputeContentMd5(source, source.Length); var objectMeta = new ObjectMetadata(); objectMeta.AddHeader("Content-MD5", md5); objectMeta.UserMetadata.Add("Content-MD5", md5); if (properties != null) { objectMeta.ContentType = properties.ContentType; } _ossClient.PutObject(containerName, blobName, source, objectMeta); }); } catch (Exception ex) { if (ex.IsOssStorageException()) { throw ex.Convert(); } throw; } }
/// <summary> /// 获取OSS key /// </summary> /// <param name="files">上传文件的流信息</param> /// <param name="absolutely_address">存放的绝对路径</param> /// <param name="webRootPath">系统初始化路径</param> /// <param name="result_number">返回执行失败的错误码</param> /// <param name="tagId">图片分类ID</param> /// <returns></returns> public static Dictionary <String, String> GetOSSKey(IFormFile file, string absolutely_address, string webRootPath, String file_name) { //读取图片名称和图片后缀 string extension = new FileInfo(file_name).Extension.ToLower(); //复制图片到本地临时文件夹 file_name = CommonUtil.ReadDateTime() + file.Length + extension; var fileToUpload = webRootPath + absolutely_address + file_name; using (FileStream fs = File.Create(fileToUpload)) { file.CopyTo(fs); fs.Flush(); } //MD5获取素材key值 string md5; using (var fs = File.Open(fileToUpload, FileMode.Open)) { md5 = OssUtils.ComputeContentMd5(fs, fs.Length); } var key = md5.Replace("/", "@") + extension; // File.Delete(fileToUpload); Dictionary <String, String> map = new Dictionary <String, String>(); map.Add("filePath", fileToUpload); map.Add("fileKey", key); return(map); }
public string UploadFile(Stream file) { var key = OssUtils.ComputeContentMd5(file, file.Length); file.Seek(0, SeekOrigin.Begin); return(this.client.PutObject(bucketName, key, file).ETag); }
public static void AsyncPutObject(string bucketName, string filename, Action <string> putCallback = null) { CreateDispatcherGameObject(); try { var fs = new FileStream(filename, FileMode.Open); string md5 = OssUtils.ComputeContentMd5(fs, fs.Length); var ossClient = new OssClient(endPoint, stsToken.AccessKeyId, stsToken.AccessKeySecret, stsToken.SecurityToken); var metadata = new ObjectMetadata(); metadata.ContentLength = fs.Length; metadata.CacheControl = "public"; metadata.ContentMd5 = md5; var filemd5 = Utils.File.FormatMD5(Convert.FromBase64String(md5)); string ext = System.IO.Path.GetExtension(filename); var ossFileName = filemd5 + ext; Hashtable state = new Hashtable(); state["client"] = ossClient; state["fs"] = fs; state["callback"] = putCallback; state["ossfilename"] = ossFileName; ossClient.BeginPutObject(bucketName, ossFileName, fs, metadata, PutObjectCallback, state); // _event.WaitOne(); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); if (putCallback != null) { if (ex is OssException) { putCallback(((OssException)ex).ErrorCode); } else { putCallback(ex.Message); } } } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); if (putCallback != null) { if (ex is ServiceException) { putCallback(((ServiceException)ex).ErrorCode); } else { putCallback(ex.Message); } } } }
/// <summary> /// 文件上传阿里云 /// </summary> /// <param name="workDir"></param> /// <param name="path"></param> /// <returns></returns> public bool uploadFile(string workDir, string path) { string localPath = workDir + "/" + path; try { var fi = new FileInfo(localPath); long fileSize = fi.Length; if (fileSize > m_multiSize) { return(uploadMulti(localPath, path, fileSize)); } else { string md5; using (var fs = File.Open(localPath, FileMode.Open, FileAccess.Read)) { md5 = OssUtils.ComputeContentMd5(fs, fs.Length);//md5效验 } return(uploadSingle(localPath, path, md5)); } } catch (Exception ex) { Console.WriteLine("获取文件信息错误:" + ex.Message); return(false); } }
public static void PutObjectWithMd5(string bucketName) { const string key = "PutObjectWithMd5"; string md5; using (var fs = File.Open(fileToUpload, FileMode.Open)) { md5 = OssUtils.ComputeContentMd5(fs, fs.Length); } var meta = new ObjectMetadata() { ContentMd5 = md5 }; try { client.PutObject(bucketName, key, fileToUpload, meta); Console.WriteLine("Put object:{0} succeeded", key); } catch (OssException ex) { Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID:{2}\tHostID:{3}", ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId); } catch (Exception ex) { Console.WriteLine("Failed with error info: {0}", ex.Message); } }
public static string OssPutObject(string fileToUpload, string extension) { string md5; using (var fs = File.Open(fileToUpload, FileMode.Open)) { md5 = OssUtils.ComputeContentMd5(fs, fs.Length); } var key = md5 + "." + extension; var result = client.PutObject(OssConfig.bucket, key, fileToUpload); return(OssConfig.OssHostUrl + key); }
/// <summary> /// 上传指定的文件到指定的OSS的存储空间并且带MD5校验 /// </summary> /// <param name="key">文件的在OSS上保存的名称</param> /// <param name="content">文件流</param> /// <param name="bucketName">指定的存储空间名称</param> /// <param name="config">OSS地址的配置信息</param> /// <returns></returns> public static string PutObjectMD5(string key, Stream content, string bucketName = "", OssConfig config = null) { if (bucketName == "") { bucketName = _bucketName; } var md5 = OssUtils.ComputeContentMd5(content, content.Length); key = _preFolder + key; OssClientProvider.GetOssClient(config).PutObject(bucketName, key, content, new ObjectMetadata() { ContentMd5 = md5 }); return(key); }
/// <summary> /// 上传图片至阿里云OSS /// </summary> /// <param name="filePath">图片地址</param> /// <returns></returns> public static string UploadFileToOss(string filePath) { FileStream fs = null; try { if (filePath.ToLower().Contains("http://") || filePath.ToLower().Contains("https://")) { Uri uri = new Uri(filePath); filePath = System.Web.Hosting.HostingEnvironment.MapPath(uri.AbsolutePath); } else { filePath = System.Web.Hosting.HostingEnvironment.MapPath(filePath); } fs = File.Open(filePath, FileMode.Open); string md5 = OssUtils.ComputeContentMd5(fs, fs.Length); DateTime dt = DateTime.Now; string today = dt.ToString("yyyy/MMdd/HH"); //string FileName = uploadFileName + today + Path.GetExtension(uploadFileName);//文件名=文件名+当前上传时间 string FilePath = "c8/" + today + "/" + Path.GetFileName(filePath);//云文件保存路径 OssClient aliyun = new OssClient("https://oss-cn-shenzhen.aliyuncs.com", "LTAIMllFooLyjXJz", "xMiVnoyKWdD3eSV5VUd2XcrLOPeSPa"); //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new ObjectMetadata { ContentMd5 = md5, }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) aliyun.PutObject("c8-public", FilePath, fs, objectMeta); string oospath = "https://c8-public.oss-cn-shenzhen.aliyuncs.com/" + FilePath; return(oospath); } catch (Exception ex) { LogHelper.WriteLog(ex.ToString()); return(""); } finally { if (fs != null) { fs.Dispose(); fs.Close(); } } }
/// <summary> /// oss上传 /// </summary> /// <param name="prepareInfo">酷安接口返回的信息</param> /// <param name="fileInfo">酷安接口返回的文件信息</param> /// <param name="stream">文件流</param> /// <param name="contentType">上传文件的imei类型</param> /// <returns>响应数据</returns> /// <exception cref="OssException">OSS异常</exception> /// <exception cref="Newtonsoft.Json.JsonSerializationException">JSON序列化异常</exception> public static Resp <OssUploadPictureResponse> OssUpload( OssUploadPicturePrepareResultUploadPrepareInfo prepareInfo, OssUploadPicturePrepareResultFileInfo fileInfo, Stream stream, string contentType, OssUploadProgressHandler progressHandler = null) { var oss = new Aliyun.OSS.OssClient( prepareInfo.EndPoint.Replace("https://", ""), prepareInfo.AccessKeyId, prepareInfo.AccessKeySecret, prepareInfo.SecurityToken ); var callback = "eyJjYWxsYmFja0JvZHlUeXBlIjoiYXBwbGljYXRpb25cL2pzb24iLCJjYWxsYmFj" + "a0hvc3QiOiJhcGkuY29vbGFway5jb20iLCJjYWxsYmFja1VybCI6Imh0dHBzOlwvXC9hcGkuY29vbGF" + "way5jb21cL3Y2XC9jYWxsYmFja1wvbW9iaWxlT3NzVXBsb2FkU3VjY2Vzc0NhbGxiYWNrP2NoZWNrQX" + "J0aWNsZUNvdmVyUmVzb2x1dGlvbj0wJnZlcnNpb25Db2RlPTIxMDIwMzEiLCJjYWxsYmFja0JvZHkiO" + "iJ7XCJidWNrZXRcIjoke2J1Y2tldH0sXCJvYmplY3RcIjoke29iamVjdH0sXCJoYXNQcm9jZXNzXCI6" + "JHt4OnZhcjF9fSJ9"; var callbackVar = "eyJ4OnZhcjEiOiJmYWxzZSJ9"; var metadata = new ObjectMetadata { ContentMd5 = OssUtils.ComputeContentMd5(stream, stream.Length), ContentType = contentType }; metadata.AddHeader(HttpHeaders.Callback, callback); metadata.AddHeader(HttpHeaders.CallbackVar, callbackVar); var request = new PutObjectRequest( prepareInfo.Bucket, fileInfo.UploadFileName, stream, metadata); request.StreamTransferProgress += (object sender, StreamTransferProgressArgs args) => { // 文件上传进度回调 progressHandler?.Invoke(fileInfo, sender, args); }; var putResult = oss.PutObject(request); // 相应数据 var response = GetCallbackResponse(putResult); var jsonObj = JsonConvert.DeserializeObject <Resp <OssUploadPictureResponse> >(response); return(jsonObj); }
public string UploadImage(byte[] images, bool isBuildThumbnail = false, string upload = "") { // config.endpoint = "oss-cn-beijing.aliyuncs.com" 我是华北2的 var ossClient = new OssClient(config.endpoint, config.accessKeyId, config.accessKeySecret); try { //判定bucket是否存在 //var result = ossClient.DoesBucketExist(config.Bucket); //重置文件名称 var imageName = GetImageName(prefix: upload); //bytes 转换为Stream var objStream = new MemoryStream(images); objStream.Seek(0, SeekOrigin.Begin); //这个是否需要? string md5 = OssUtils.ComputeContentMd5(objStream, objStream.Length); var objectMeta = new ObjectMetadata { ContentMd5 = md5, ContentType = "image/png", }; PutObjectResult result = ossClient.PutObject(config.Bucket, imageName, objStream, objectMeta); objStream.Close(); objStream.Dispose(); string imgurl = "http://" + string.Join(".", config.Bucket, config.endpoint) + "/" + imageName; #region 生成缩略图 if (isBuildThumbnail) { ThumbnailOssPutObject(config.Bucket, imageName, images, ossClient); } #endregion return(imgurl); } catch (Exception ex) { // ex报错 :错误信息 The request signature we calculated does not match the signature you provided. Check your key and signing method. return(""); } }
public string UploadImage(byte[] images, bool isBuildThumbnail = false, string upload = "") { // config.endpoint = "oss-cn-beijing.aliyuncs.com" 我是华北2的 var ossClient = new OssClient(mediaSetting.Endpoint, mediaSetting.AccessKeyId, mediaSetting.AccessKeySecret); try { //判定bucket是否存在 //var result = ossClient.DoesBucketExist(config.Bucket); //重置文件名称 var imageName = GetImageName(prefix: upload); //bytes 转换为Stream var objStream = new MemoryStream(images); objStream.Seek(0, SeekOrigin.Begin); //这个是否需要? string md5 = OssUtils.ComputeContentMd5(objStream, objStream.Length); var objectMeta = new ObjectMetadata { ContentMd5 = md5, ContentType = "image/png", }; PutObjectResult result = ossClient.PutObject(mediaSetting.Bucket, imageName, objStream, objectMeta); objStream.Close(); objStream.Dispose(); string imgurl = "http://" + string.Join(".", mediaSetting.Bucket, mediaSetting.Endpoint) + "/" + imageName; #region 生成缩略图 if (isBuildThumbnail) { ThumbnailOssPutObject(mediaSetting.Bucket, imageName, images, ossClient); } #endregion return(imgurl); } catch (Exception ex) { Logger.Debug(ex.Message); return(null); } }
public async override Task <UploadFileResult> UploadFileAsync(Stream stream, string fileName = null, string savePath = null) { var client = new OssClient(aliSettings.BucketEndpoint, aliSettings.AK, aliSettings.SK); try { var dayPath = DateTime.Today.ToString("yyyy/MM/dd"); var saveKey = string.IsNullOrWhiteSpace(savePath) ? $"{dayPath}/{fileName}" : $"{savePath}/{fileName}"; if (client.DoesObjectExist(aliSettings.DefaultBucket, saveKey)) { var uploadObjectMd5 = OssUtils.ComputeContentMd5(stream, stream.Length); var existObjectMd5 = client.GetObjectMetadata(aliSettings.DefaultBucket, saveKey).ContentMd5; if (uploadObjectMd5 != existObjectMd5) { saveKey = string.IsNullOrWhiteSpace(savePath) ? $"{dayPath}/{StringUtilities.GenerateString(16, containsUpperCase: false, containsSpecialChar: false)}-{fileName}" : $"{savePath}/{StringUtilities.GenerateString(16, containsUpperCase: false, containsSpecialChar: false)}-{fileName}"; } } var uploadResult = client.PutObject(aliSettings.DefaultBucket, saveKey, stream); if (uploadResult.HttpStatusCode == System.Net.HttpStatusCode.OK) { var fileUrl = $"{aliSettings.FileUrlPrefix.TrimEnd('/')}/{saveKey}"; return(new UploadFileResult { Status = 1, Message = $"File upload successfully.", FileName = fileName, FileUrl = fileUrl }); } return(await Task.FromResult(new UploadFileResult { Status = 0, Message = "File upload failed.", FileName = fileName })); } catch (Exception ex) { Console.WriteLine($"UploadFileAsync ERROR:{ex.Message}"); return(new UploadFileResult { Status = 0, Message = $"File upload failed. Error Message:{ex.Message}", FileName = fileName }); } }
public static UploadPartCommand Create(IServiceClient client, Uri endpoint, ExecutionContext context, UploadPartRequest uploadPartRequest) { OssUtils.CheckBucketName(uploadPartRequest.BucketName); OssUtils.CheckObjectKey(uploadPartRequest.Key); if (string.IsNullOrEmpty(uploadPartRequest.UploadId)) { throw new ArgumentException("uploadId should be specified"); } if (!uploadPartRequest.PartNumber.HasValue) { throw new ArgumentException("partNumber should be specified"); } if (!uploadPartRequest.PartSize.HasValue) { throw new ArgumentException("partSize should be specified"); } if (uploadPartRequest.InputStream == null) { throw new ArgumentException("inputStream should be specified"); } if (uploadPartRequest.PartSize < 0 || uploadPartRequest.PartSize > OssUtils.MaxFileSize) { throw new ArgumentException("partSize not live in valid range"); } if (!OssUtils.IsPartNumberInRange(uploadPartRequest.PartNumber)) { throw new ArgumentException("partNumber not live in valid range"); } if (uploadPartRequest.Md5Digest == null && uploadPartRequest.PartSize != null) { uploadPartRequest.Md5Digest = OssUtils.ComputeContentMd5(uploadPartRequest.InputStream, (long)uploadPartRequest.PartSize); } return(new UploadPartCommand(client, endpoint, context, DeserializerFactory.GetFactory().CreateUploadPartResultDeserializer(uploadPartRequest.PartNumber.Value), uploadPartRequest)); }
private void Validate(DownloadObjectRequest request, ResumableDownloadContext resumableContext) { if (_conf.EnalbeMD5Check && !string.IsNullOrEmpty(resumableContext.ContentMd5)) { using (var fs = File.Open(GetTempDownloadFile(request), FileMode.Open)) { string calcuatedMd5 = OssUtils.ComputeContentMd5(fs, fs.Length); if (calcuatedMd5 != resumableContext.ContentMd5) { throw new OssException(string.Format("The Md5 of the downloaded file {0} does not match the expected. Expected:{1}, actual:{2}", GetTempDownloadFile(request), resumableContext.ContentMd5, calcuatedMd5 )); } } } File.Move(GetTempDownloadFile(request), request.DownloadFile); }
/// <inheritdoc/> public async Task SaveBlobStream(string containerName, string blobName, Stream source) { try { await Task.Run(() => { var key = $"{containerName}/{blobName}"; var md5 = OssUtils.ComputeContentMd5(source, source.Length); var objectMeta = new ObjectMetadata(); objectMeta.AddHeader("Content-MD5", md5); objectMeta.UserMetadata.Add("Content-MD5", md5); _ossClient.PutObject(_cfg.BucketName, key, source, objectMeta).HandlerError("上传对象出错"); }); } catch (Exception ex) { throw new StorageException(StorageErrorCode.PostError.ToStorageError(), new Exception(ex.ToString())); } }
public override ServiceRequest BuildRequest() { var req = new ServiceRequest(Bucket, "", HttpMethod.Post); // build content var model = new DeleteObjectsRequestModel(Quiet, Keys); var content = SerializeHelper.Serialize(model); req.ContentMd5 = OssUtils.ComputeContentMd5(content); req.SetContent(content, "application/xml"); // params req.Parameters.Add("delete", ""); if (!String.IsNullOrEmpty(EncodingType)) { req.Parameters.Add(RequestParameters.ENCODING_TYPE, EncodingType); } return(req); }
/// <summary> /// Put File With Md5 Check /// </summary> /// <param name="filePath">File to upload</param> /// <param name="objectKey">Object key in oss</param> /// <param name="md5">md5 code</param> /// <returns></returns> public bool PutFileWithMd5(string filePath, string objectKey, string md5) { try { using (FileStream fs = File.Open(filePath, FileMode.Open)) { md5 = OssUtils.ComputeContentMd5(fs, fs.Length); } ObjectMetadata objectMeta = new ObjectMetadata { ContentMd5 = md5 }; client.PutObject(bucketName, objectKey, filePath, objectMeta); return(true); } catch (OssException ex) { lastError = ex; return(false); } }
public static bool UploadOSSFile(string key, Stream fileStream, long length) { try { string md5 = OssUtils.ComputeContentMd5(fileStream, length); //创建上传Object的Metadata ObjectMetadata objectMetadata = new ObjectMetadata() { ContentMd5 = md5 }; OssClient ossClient = new OssClient(endpoin, accessid, accessKey); var result = ossClient.PutObject(bucket, key, fileStream, objectMetadata); return(true); } catch (Exception ex) { Debug.WriteLine(ex.ToString()); return(false); } }
public static CloudFile UploadFile(byte[] uploadFileBytes, string fileName, out string pathurl) { var model = new CloudFile(); pathurl = ""; //上传到阿里云 using (Stream fileStream = new MemoryStream(uploadFileBytes))//转成Stream流 { string md5 = OssUtils.ComputeContentMd5(fileStream, fileStream.Length); string today = DateTime.Now.ToString("yyyyMM"); string FileName = fileStream + today + DateTime.Now.Day; //文件名=文件名+当前上传时间 string FilePath = "Upload/" + today + "/" + FileName; //云文件保存路径 try { //初始化阿里云配置--外网Endpoint、访问ID、访问password //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new ObjectMetadata { ContentMd5 = md5, }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) var result = _clinet.PutObject("bucketName", FilePath, fileStream, objectMeta); model.Code = (int)result.HttpStatusCode; //返回给UEditor的插入编辑器的图片的src //Result.Url = "http://bucketName.oss-cn-【外网Endpoint区域】.aliyuncs.com/" + FilePath; pathurl = _cAliyunConfig.EndPoint + FilePath; //Result.State = UploadState.Success; } catch (Exception e) { model.Code = 500; model.Message = e.Message; } } return(model); }
public void UploadToAliyun(byte[] uploadFileBytes) { string uploadFileName = string.Empty; //上传到阿里云 using (Stream fileStream = new MemoryStream(uploadFileBytes))//转成Stream流 { string md5 = OssUtils.ComputeContentMd5(fileStream, uploadFileBytes.Length); string today = DateTime.Now.ToString("yyyyMMdd"); string FileName = uploadFileName + today + Path.GetExtension(uploadFileName); //文件名=文件名+当前上传时间 string FilePath = "Upload/" + today + "/" + FileName; //云文件保存路径 try { //初始化阿里云配置--外网Endpoint、访问ID、访问password OssClient aliyun = new OssClient("https://oss-cn-【外网Endpoint区域】.aliyuncs.com", "your Access Key ID", "your Access Key Secret"); //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new ObjectMetadata { ContentMd5 = md5, }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) aliyun.PutObject("bucketName", FilePath, fileStream, objectMeta); new Model <IList <string> >("", "", null); UploadConfig.Config.Result(() => { return(new Model("", "")); }); } catch (Exception e) { } finally { } } }
private void Validate(DownloadObjectRequest request, ResumableDownloadContext resumableContext) { if (_conf.EnalbeMD5Check && !string.IsNullOrEmpty(resumableContext.ContentMd5)) { using (var fs = File.Open(GetTempDownloadFile(request), FileMode.Open)) { string calcuatedMd5 = OssUtils.ComputeContentMd5(fs, fs.Length); if (calcuatedMd5 != resumableContext.ContentMd5) { throw new OssException(string.Format("The Md5 of the downloaded file {0} does not match the expected. Expected:{1}, actual:{2}", GetTempDownloadFile(request), resumableContext.ContentMd5, calcuatedMd5 )); } } } else if (_conf.EnableCrcCheck && !string.IsNullOrEmpty(resumableContext.Crc64)) { ulong calculatedCrc = 0; foreach (var part in resumableContext.PartContextList) { calculatedCrc = Crc64.Combine(calculatedCrc, part.Crc64, part.Length); } if (calculatedCrc.ToString() != resumableContext.Crc64) { throw new OssException(string.Format("The Crc64 of the downloaded file {0} does not match the expected. Expected:{1}, actual:{2}", GetTempDownloadFile(request), resumableContext.Crc64, calculatedCrc )); } } File.Move(GetTempDownloadFile(request), request.DownloadFile); }
/// <summary> /// 保存对象到指定的容器 /// </summary> /// <param name="containerName"></param> /// <param name="blobName"></param> /// <param name="source"></param> public async Task SaveBlobStream(string containerName, string blobName, Stream source) { try { await Task.Run(() => { var exist = _ossClient.DoesBucketExist(containerName); if (!exist) { _ossClient.CreateBucket(containerName); } var md5 = OssUtils.ComputeContentMd5(source, source.Length); var objectMeta = new ObjectMetadata(); objectMeta.AddHeader("Content-MD5", md5); objectMeta.UserMetadata.Add("Content-MD5", md5); _ossClient.PutObject(containerName, blobName, source, objectMeta); }); } catch (Exception ex) { throw new StorageException(StorageErrorCode.PostError.ToStorageError(), new Exception(ex.ToString())); } }
public async Task <IActionResult> CkEditorUploadFiles() { var jm = new CKEditorUploadedResult(); //初始化上传参数 var maxSize = 1024 * 1024 * _filesStorageOptions.MaxSize; //上传大小5M var file = Request.Form.Files["upload"]; if (file == null) { jm.error.message = "请选择文件"; return(new JsonResult(jm)); } var fileName = file.FileName; var fileExt = Path.GetExtension(fileName).ToLowerInvariant(); //检查大小 if (file.Length > maxSize) { jm.error.message = "上传文件大小超过限制,最大允许上传" + _filesStorageOptions.MaxSize + "M"; return(new JsonResult(jm)); } //检查文件扩展名 if (string.IsNullOrEmpty(fileExt) || Array.IndexOf(_filesStorageOptions.FileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1) { jm.error.message = "上传文件扩展名是不允许的扩展名,请上传后缀名为:" + _filesStorageOptions.FileTypes; return(new JsonResult(jm)); } var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt; var today = DateTime.Now.ToString("yyyyMMdd"); if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.LocalStorage.ToString()) { var saveUrl = "/upload/" + today + "/"; var dirPath = _webHostEnvironment.WebRootPath + saveUrl; if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } var filePath = dirPath + newFileName; var fileUrl = saveUrl + newFileName; string bucketBindDomain = AppSettingsHelper.GetContent("AppConfig", "AppUrl"); await using (var fs = System.IO.File.Create(filePath)) { await file.CopyToAsync(fs); fs.Flush(); } jm.uploaded = 1; jm.fileName = fileName; jm.url = bucketBindDomain + fileUrl; } else if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.AliYunOSS.ToString()) { //上传到阿里云 await using (var fileStream = file.OpenReadStream()) //转成Stream流 { var md5 = OssUtils.ComputeContentMd5(fileStream, file.Length); var filePath = "Upload/" + today + "/" + newFileName; //云文件保存路径 //初始化阿里云配置--外网Endpoint、访问ID、访问password var aliyun = new OssClient(_filesStorageOptions.Endpoint, _filesStorageOptions.AccessKeyId, _filesStorageOptions.AccessKeySecret); //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new ObjectMetadata { ContentMd5 = md5 }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) aliyun.PutObject(_filesStorageOptions.BucketName, filePath, fileStream, objectMeta); //返回给UEditor的插入编辑器的图片的src jm.uploaded = 1; jm.fileName = fileName; jm.url = _filesStorageOptions.BucketBindUrl + filePath; } } else if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.QCloudOSS.ToString()) { var filePath = "Upload/" + today + "/" + newFileName; //云文件保存路径 //上传到腾讯云OSS //初始化 CosXmlConfig string appid = _filesStorageOptions.AccountId; //设置腾讯云账户的账户标识 APPID string region = _filesStorageOptions.CosRegion; //设置一个默认的存储桶地域 CosXmlConfig config = new CosXmlConfig.Builder() .IsHttps(true) //设置默认 HTTPS 请求 .SetRegion(region) //设置一个默认的存储桶地域 .SetDebugLog(true) //显示日志 .Build(); //创建 CosXmlConfig 对象 long durationSecond = 600; //每次请求签名有效时长,单位为秒 QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(_filesStorageOptions.AccessKeyId, _filesStorageOptions.AccessKeySecret, durationSecond); byte[] bytes; await using (var ms = new MemoryStream()) { await file.CopyToAsync(ms); bytes = ms.ToArray(); } var cosXml = new CosXmlServer(config, qCloudCredentialProvider); COSXML.Model.Object.PutObjectRequest putObjectRequest = new COSXML.Model.Object.PutObjectRequest(_filesStorageOptions.BucketName, filePath, bytes); cosXml.PutObject(putObjectRequest); jm.uploaded = 1; jm.fileName = fileName; jm.url = _filesStorageOptions.BucketBindUrl + filePath; } return(new JsonResult(jm)); }
public async Task <JsonResult> UploadFilesFByBase64([FromBody] FMBase64Post entity) { var jm = new AdminUiCallBack(); if (string.IsNullOrEmpty(entity.base64)) { jm.msg = "请上传合法内容"; return(new JsonResult(jm)); } entity.base64 = entity.base64.Replace("data:image/png;base64,", "").Replace("data:image/jgp;base64,", "").Replace("data:image/jpg;base64,", "").Replace("data:image/jpeg;base64,", "");//将base64头部信息替换 byte[] bytes = Convert.FromBase64String(entity.base64); MemoryStream memStream = new MemoryStream(bytes); Image mImage = Image.FromStream(memStream); Bitmap bp = new Bitmap(mImage); var newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + ".jpg"; var today = DateTime.Now.ToString("yyyyMMdd"); if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.LocalStorage.ToString()) { var saveUrl = "/upload/" + today + "/"; var dirPath = _webHostEnvironment.WebRootPath + saveUrl; string bucketBindDomain = AppSettingsHelper.GetContent("AppConfig", "AppUrl"); if (!Directory.Exists(dirPath)) { Directory.CreateDirectory(dirPath); } var filePath = dirPath + newFileName; var fileUrl = saveUrl + newFileName; bp.Save(filePath, System.Drawing.Imaging.ImageFormat.Jpeg);//注意保存路径 jm.code = 0; jm.msg = "上传成功!"; jm.data = new { fileUrl, src = bucketBindDomain + fileUrl }; jm.otherData = GlobalEnumVars.FilesStorageOptionsType.LocalStorage.ToString(); } else if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.AliYunOSS.ToString()) { //上传到阿里云 // 设置当前流的位置为流的开始 memStream.Seek(0, SeekOrigin.Begin); await using (var fileStream = memStream) //转成Stream流 { var md5 = OssUtils.ComputeContentMd5(fileStream, memStream.Length); var filePath = "Upload/" + today + "/" + newFileName; //云文件保存路径 //初始化阿里云配置--外网Endpoint、访问ID、访问password var aliyun = new OssClient(_filesStorageOptions.Endpoint, _filesStorageOptions.AccessKeyId, _filesStorageOptions.AccessKeySecret); //将文件md5值赋值给meat头信息,服务器验证文件MD5 var objectMeta = new ObjectMetadata { ContentMd5 = md5 }; //文件上传--空间名、文件保存路径、文件流、meta头信息(文件md5) //返回meta头信息(文件md5) aliyun.PutObject(_filesStorageOptions.BucketName, filePath, fileStream, objectMeta); //返回给UEditor的插入编辑器的图片的src jm.code = 0; jm.msg = "上传成功"; jm.data = new { fileUrl = _filesStorageOptions.BucketBindUrl + filePath, src = _filesStorageOptions.BucketBindUrl + filePath }; } jm.otherData = GlobalEnumVars.FilesStorageOptionsType.AliYunOSS.ToString(); } else if (_filesStorageOptions.StorageType == GlobalEnumVars.FilesStorageOptionsType.QCloudOSS.ToString()) { //上传到腾讯云OSS //初始化 CosXmlConfig string appid = _filesStorageOptions.AccountId; //设置腾讯云账户的账户标识 APPID string region = _filesStorageOptions.CosRegion; //设置一个默认的存储桶地域 CosXmlConfig config = new CosXmlConfig.Builder() .IsHttps(true) //设置默认 HTTPS 请求 .SetRegion(region) //设置一个默认的存储桶地域 .SetDebugLog(true) //显示日志 .Build(); //创建 CosXmlConfig 对象 long durationSecond = 600; //每次请求签名有效时长,单位为秒 QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider( _filesStorageOptions.AccessKeyId, _filesStorageOptions.AccessKeySecret, durationSecond); var cosXml = new CosXmlServer(config, qCloudCredentialProvider); var filePath = "Upload/" + today + "/" + newFileName; //云文件保存路径 COSXML.Model.Object.PutObjectRequest putObjectRequest = new COSXML.Model.Object.PutObjectRequest(_filesStorageOptions.BucketName, filePath, bytes); cosXml.PutObject(putObjectRequest); jm.code = 0; jm.msg = "上传成功"; jm.data = new { fileUrl = _filesStorageOptions.BucketBindUrl + filePath, src = _filesStorageOptions.BucketBindUrl + filePath }; } return(new JsonResult(jm)); }
public override void Startup(IService service) { Instance = this; var siteIds = SiteApi.GetSiteIdList(); foreach (var siteId in siteIds) { var config = ConfigApi.GetConfig <ConfigInfo>(siteId, nameof(ConfigInfo)); if (config == null) { continue; } _dict.Add(siteId, config); if (!config.IsEnabled || !config.IsInitSyncAll || string.IsNullOrEmpty(config.AccessKeyId) || string.IsNullOrEmpty(config.AccessKeySecret) || string.IsNullOrEmpty(config.BucketName) || string.IsNullOrEmpty(config.BucketEndPoint)) { continue; } var client = new OssClient(config.BucketEndPoint, config.AccessKeyId, config.AccessKeySecret); var summaryDict = new Dictionary <string, OssObjectSummary>(); ObjectListing result; var nextMarker = string.Empty; do { var listObjectsRequest = new ListObjectsRequest(config.BucketName) { Marker = nextMarker, MaxKeys = 100 }; if (!string.IsNullOrEmpty(config.BucketPath)) { listObjectsRequest.Prefix = config.BucketPath; } result = client.ListObjects(listObjectsRequest); foreach (var summary in result.ObjectSummaries) { summaryDict.Add(summary.Key, summary); } nextMarker = result.NextMarker; } while (result.IsTruncated); var siteDirectoryPath = SiteApi.GetSitePath(siteId); List <string> GetAllFilePathList(DirectoryInfo dir)//搜索文件夹中的文件 { var fileList = new List <string>(); var allFile = dir.GetFiles(); foreach (var fi in allFile) { fileList.Add(fi.FullName); } var allDir = dir.GetDirectories(); foreach (var d in allDir) { GetAllFilePathList(d); } return(fileList); } var allFilePathList = GetAllFilePathList(new DirectoryInfo(siteDirectoryPath)); foreach (var filePath in allFilePathList) { var key = (config.BucketPath + Utils.GetRelativePath(filePath, siteDirectoryPath)).Trim('/'); if (!summaryDict.ContainsKey(key)) { client.PutObject(config.BucketName, key, filePath); } else { var summary = summaryDict[key]; using (var fs = File.Open(filePath, FileMode.Open)) { var md5 = OssUtils.ComputeContentMd5(fs, fs.Length); if (md5 != summary.ETag) { client.PutObject(config.BucketName, key, filePath); } } } } } FileSystemWatcher watcher = new FileSystemWatcher(PhysicalApplicationPath); watcher.Changed += WatcherOnChanged; service.AddSiteMenu(siteId => new Menu { Text = "阿里云OSS", Href = "admin/index.html" }); }