ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
七牛图片上传 SDK(.NET 版本):https://developer.qiniu.com/kodo/sdk/1237/csharp
UpoladService
示例代码:
publicclassUpoladService:IUpoladService{privatereadonlystaticstring[]_p_w_picpathExtensions=newstring[]{".jpg",".png",".gif",".jpeg",".bmp"};privateAppSettings_appSettings;publicUpoladService(IOptions<AppSettings>appSettings){_appSettings=appSettings.Value;}publicasyncTask<SubmitResult>UploadStream(Streamstream,stringfileName,AppTypeappType){if(stream==null){returnSubmitResult.Fail("图片为null");}if(string.IsNullOrWhiteSpace(fileName)){returnSubmitResult.Fail("图片名称为空");}try{varextensionName=fileName.Substring(fileName.LastIndexOf("."));if(!_p_w_picpathExtensions.Contains(extensionName.ToLower())){returnSubmitResult.Fail("图片格式有误");}vargenerateFileName=$"{DateTime.Now.ToString("yyyyMMddHHmmssfff-")}{Guid.NewGuid().GetHashCode().ToString().Replace("-",string.Empty)}{extensionName}";varsaveKey=$"wl/{appType.ToString().ToLower()}/{generateFileName}";//生成(上传)凭证时需要使用此Mac//这个示例单独使用了一个Settings类,其中包含AccessKey和SecretKey//实际应用中,请自行设置您的AccessKey和SecretKeyMacmac=newMac(_appSettings.AccessKey,_appSettings.SecretKey);//上传策略,参见//https://developer.qiniu.com/kodo/manual/put-policyPutPolicyputPolicy=newPutPolicy();//如果需要设置为"覆盖"上传(如果云端已有同名文件则覆盖),请使用SCOPE="BUCKET:KEY"//putPolicy.Scope=bucket+":"+saveKey;putPolicy.Scope=_appSettings.Bucket;//上传策略有效期(对应于生成的凭证的有效期)putPolicy.SetExpires(3600);//上传到云端多少天后自动删除该文件,如果不设置(即保持默认默认)则不删除//putPolicy.DeleteAfterDays=1;//生成上传凭证,参见//https://developer.qiniu.com/kodo/manual/upload-tokenstringjstr=putPolicy.ToJsonString();stringtoken=Auth.CreateUploadToken(mac,jstr);FormUploaderfu=newFormUploader();varresult=awaitfu.UploadStreamAsync(stream,saveKey,token);if(result.Code==200){returnSubmitResult.Success($"{_appSettings.Domain}/{saveKey}");}returnSubmitResult.Fail("上传失败");}catch(Exceptionex){returnSubmitResult.Fail($"上传失败:{ex.Message}");}}}
UploadController
示例代码:
[EnableCors("default")][Route("upload")]publicclassUploadController:WebApiController{privateIUpoladService_upoladService;publicUploadController(IUpoladServiceupoladService){_upoladService=upoladService;}[Route("{appType}/stream")][HttpPost]publicasyncTask<IActionResult>UploadByStream(AppTypeappType){if(Request.Form.Files.Count==0){returnFail("图片不存在");}varfile=Request.Form.Files[0];varresult=await_upoladService.UploadStream(file.OpenReadStream(),file.FileName,appType);if(result.IsSuccess){returnOk(new{pic_url=result.Data,is_success=true});}returnFail(result.Message);}[Route("{appType}/base64")][HttpPost]publicasyncTask<IActionResult>UploadByBase64([FromBody]JObjectdata,AppTypeappType){varp_w_picpathBase64=data["p_w_picpath_base64"].ToObject<string>();varfileName=data["file_name"].ToObject<string>();if(!string.IsNullOrWhiteSpace(p_w_picpathBase64)){varreg=newRegex("data:p_w_picpath/(.*);base64,");p_w_picpathBase64=reg.Replace(p_w_picpathBase64,"");byte[]p_w_picpathByte=Convert.FromBase64String(p_w_picpathBase64);varstream=newMemoryStream(p_w_picpathByte);varresult=await_upoladService.UploadStream(stream,fileName,appType);if(result.IsSuccess){returnOk(new{pic_url=result.Data,is_success=true});}returnFail(result.Message);}returnJson(new{success=false,result="请选择文件!"});}}
JS 上传图片示例代码:
<formmethod="post"enctype="multipart/form-data"><inputtype="file"id="files"name="files"multiple/><inputtype="button"id="uploadStream"value="UploadSelectedFiles"/><inputtype="button"id="uploadBase64"value="UploadSelectedFiles"/></form><script>$(document).ready(function(){$("#upload").click(function(evt){varfileUpload=$("#files").get(0);varfiles=fileUpload.files;vardata=newFormData();for(vari=0;i<files.length;i++){data.append(files[i].name,files[i]);}$.ajax({type:"POST",url:"http://localhost:5002/upload/avatar/stream",processData:false,contentType:false,data:data,success:function(data){if(data.is_success){console.log(data.pic);}else{console.log(data.msg);}console.log(data);},error:function(){console.log("Therewaserroruploadingfiles!");}});});$("#uploadBase64").click(function(evt){varfileUpload=$("#files").get(0);varfiles=fileUpload.files;vardata={};//生成base64varreader=newFileReader();reader.readAsDataURL(files[0]);reader.onload=function(){data.p_w_picpath_base64=reader.result;data.file_name=files[0].name;$.ajax({type:"POST",url:"http://localhost:5002/upload/avatar/base64",contentType:'application/json;charset=utf-8',data:JSON.stringify(data),dataType:'json',success:function(data){if(data.is_success){console.log(data.pic);}else{console.log(data.msg);}console.log(data);},error:function(){console.log("Therewaserroruploadingfiles!");}});returnreader.result;};reader.onerror=function(error){console.log('Error:',error);};});});</script>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。