Exemplo n.º 1
0
        public Crawler Fetch()
        {
            if (!IsExternalIPAddress(this.SourceUrl))
            {
                State = "INVALID_URL";
                return(this);
            }
            var request = HttpWebRequest.Create(this.SourceUrl) as HttpWebRequest;

            using (var response = request.GetResponse() as HttpWebResponse)
            {
                if (response.StatusCode != HttpStatusCode.OK)
                {
                    State = "Url returns " + response.StatusCode + ", " + response.StatusDescription;
                    return(this);
                }
                if (response.ContentType.IndexOf("image") == -1)
                {
                    State = "Url is not an image";
                    return(this);
                }
                try
                {
                    using (var stream = response.GetResponseStream())
                    {
                        //var md5value = stream.GetStreamMd5();

                        var maxid   = _pictureRepository.GetMaxId();
                        var imgname = "img" + (maxid + 1) + ".jpg";
                        _pictureRepository.AddImg(new Picture()
                        {
                            ImgName    = imgname,
                            CreateUser = "******",
                            CreateTime = DateTime.Now,
                            Md5Value   = imgname
                        });
                        // 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
                        // 请使用FormUploader或者ResumableUploader的UploadStream方法
                        FormUploader fu     = new FormUploader();
                        var          result = fu.UploadStream(stream, imgname, GetUploadToken(imgname));
                        var          x      = Newtonsoft.Json.JsonConvert.DeserializeObject <QiniuResult>(result.Text);
                        if (x.key == null)
                        {
                            throw new Exception(result.Text);
                        }
                        this.ServerUrl = x.key;
                    }



                    State = "SUCCESS";
                }
                catch (Exception e)
                {
                    State = "抓取错误:" + e.Message;
                }
                return(this);
            }
        }
Exemplo n.º 2
0
        public override void Process()
        {
            byte[]         uploadFileBytes = null;
            string         uploadFileName  = null;
            var            accessKey       = "HNXvIcHqurHJAEDnVI4v2_qDGDvVlAXhipa6uVX-";
            var            secretKey       = "pQOAZutqyXr679mnDclCnIeaHgF0w3U-eWDFZJsp";
            HttpPostedFile file            = Request.Files[UploadConfig.UploadFieldName];
            Stream         myStream        = file.InputStream;

            uploadFileName = file.FileName;

            var fileLen = file.ContentLength;

            //// 读取文件的 byte[]
            byte[] bytes = new byte[fileLen];

            //  var temps= myStream.Read(bytes, 0, fileLen);

            if (!CheckFileType(uploadFileName))
            {
                Result.State = UploadState.TypeNotAllow;
                WriteResult();
                return;
            }
            if (!CheckFileSize(file.ContentLength))
            {
                Result.State = UploadState.SizeLimitExceed;
                WriteResult();
                return;
            }

            var md5value = Md5With32(bytes);

            if (_pictureRepository.Exist(md5value))
            {
                Result.Url   = _pictureRepository.GetBymd5(md5value).ImgName;
                Result.State = UploadState.Success;
                WriteResult();
                return;
            }
            var maxid   = _pictureRepository.GetMaxId();
            var imgname = "img" + (maxid + 1) + ".jpg";

            _pictureRepository.AddImg(new Picture()
            {
                ImgName    = imgname,
                CreateUser = "******",
                CreateTime = DateTime.Now,
                Md5Value   = md5value
            });


            // 生成(上传)凭证时需要使用此Mac
            // 这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey
            // 实际应用中,请自行设置您的AccessKey和SecretKey
            Mac    mac    = new Mac(accessKey, secretKey);
            string bucket = "siyouku";
            //string saveKey = uploadFileName;
            string saveKey = imgname;

            // 使用前请确保AK和BUCKET正确,否则此函数会抛出异常(比如code612/631等错误)
            Qiniu.Common.Config.AutoZone(accessKey, bucket, false);


            // 上传策略,参见
            // https://developer.qiniu.com/kodo/manual/put-policy
            PutPolicy putPolicy = new PutPolicy();

            // 如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用 SCOPE = "BUCKET:KEY"
            putPolicy.Scope = bucket + ":" + saveKey;
            //putPolicy.Scope = bucket;
            // 上传策略有效期(对应于生成的凭证的有效期)
            putPolicy.SetExpires(3600);
            // 上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除
            // putPolicy.DeleteAfterDays = 1;

            // 生成上传凭证,参见
            // https://developer.qiniu.com/kodo/manual/upload-token
            string jstr  = putPolicy.ToJsonString();
            string token = Auth.CreateUploadToken(mac, jstr);

            try
            {
                // 请不要使用UploadManager的UploadStream方法,因为此流不支持查找(无法获取Stream.Length)
                // 请使用FormUploader或者ResumableUploader的UploadStream方法
                FormUploader fu     = new FormUploader();
                var          result = fu.UploadStream(myStream, saveKey, token);
                var          x      = Newtonsoft.Json.JsonConvert.DeserializeObject <QiniuResult>(result.Text);
                Result.Url   = x.key;
                Result.State = UploadState.Success;
            }
            catch (Exception e)
            {
                Result.State        = UploadState.FileAccessError;
                Result.ErrorMessage = e.Message;
            }
            finally
            {
                WriteResult();
            }
        }