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); } }
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(); } }