예제 #1
0
        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);
        }
예제 #2
0
 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;
     }
 }
예제 #3
0
        /// <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);
        }
예제 #4
0
        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);
        }
예제 #5
0
파일: OSS.cs 프로젝트: zhipeng515/luaMVC
        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);
            }
        }
예제 #7
0
        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);
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        /// <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);
        }
예제 #10
0
        /// <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();
                }
            }
        }
예제 #11
0
        /// <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);
        }
예제 #12
0
        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("");
            }
        }
예제 #13
0
        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);
            }
        }
예제 #14
0
        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));
        }
예제 #16
0
        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()));
     }
 }
예제 #18
0
        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);
     }
 }
예제 #20
0
        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);
            }
        }
예제 #21
0
        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);
        }
예제 #22
0
        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()));
     }
 }
예제 #25
0
        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));
        }
예제 #26
0
        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));
        }
예제 #27
0
        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"
            });
        }