日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > asp.net >内容正文

asp.net

core webapi缩略图_.Net Core WebApi上传图片的两种方式

發(fā)布時(shí)間:2024/9/15 asp.net 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 core webapi缩略图_.Net Core WebApi上传图片的两种方式 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我這邊主要是為了上傳圖片,話不多說,上代碼。

方式一:通過Form表單上傳

后端:

///

/// 上傳圖片,通過Form表單提交

///

///

[Route("Upload/FormImg")]

[HttpPost]

public ActionResult UploadImg(List files)

{

if (files.Count<1)

{

return Error("文件為空");

}

//返回的文件地址

List filenames = new List();

var now = DateTime.Now;

//文件存儲(chǔ)路徑

var filePath = string.Format("/Uploads/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));

//獲取當(dāng)前web目錄

var webRootPath = _hostingEnvironment.WebRootPath;

if (!Directory.Exists(webRootPath + filePath))

{

Directory.CreateDirectory(webRootPath + filePath);

}

try

{

foreach (var item in files)

{

if (item != null)

{

#region 圖片文件的條件判斷

//文件后綴

var fileExtension = Path.GetExtension(item.FileName);

//判斷后綴是否是圖片

const string fileFilt = ".gif|.jpg|.jpeg|.png";

if (fileExtension == null)

{

break;

//return Error("上傳的文件沒有后綴");

}

if (fileFilt.IndexOf(fileExtension.ToLower(), StringComparison.Ordinal) <= -1)

{

break;

//return Error("請(qǐng)上傳jpg、png、gif格式的圖片");

}

//判斷文件大小

long length = item.Length;

if (length > 1024 * 1024 * 2) //2M

{

break;

//return Error("上傳的文件不能大于2M");

}

#endregion

var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得時(shí)間字符串

var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位隨機(jī)數(shù)

var saveName = strDateTime + strRan + fileExtension;

//插入圖片數(shù)據(jù)

using (FileStream fs = System.IO.File.Create(webRootPath + filePath + saveName))

{

item.CopyTo(fs);

fs.Flush();

}

filenames.Add(filePath + saveName);

}

}

return Success(filenames);

}

catch (Exception ex)

{

//這邊增加日志,記錄錯(cuò)誤的原因

//ex.ToString();

return Error("上傳失敗");

}

}

我這里主要是為了提交圖片數(shù)據(jù),所以有比較多的對(duì)圖片文件的條件判斷,這里可以根據(jù)需求,自行調(diào)整。包括文件的存儲(chǔ)方式。

前端:

.Net Core WebApi圖片上傳

通過form表單提交

action="https://localhost:44376/Upload/FormImg">

上傳的圖片,返回的地址

//前端第一種提交方式

function uplpadfile(){

//獲取表單的數(shù)據(jù)

var formdata

var file = $("#files").get(0);

var files = file.files;

var formdata = new FormData();

for (var i = 0; i < files.length; i++) {

formdata.append("files", files[i]);

}

$.ajax({

type:'Post',

data:formdata,

contentType: false,

processData: false,

url:"https://localhost:44376/Upload/FormImg",

success:function(result){

if (result.Success) {

var imglist =result.Data;

for(var i in imglist){

$("#imglist").append('');

}

}else{

alert('提交失敗,重新嘗試提交');

}

}

})

};

除了上傳寫的提交方式,另外還有兩種提交數(shù)據(jù)的方式:

方式二:

function uplpadfile(){

//獲取表單的數(shù)據(jù)

var formdata = new FormData(document.getElementById("myform"));

$.ajax({

type:'Post',

data:formdata,

contentType: false,

processData: false,

url:"https://localhost:44376/Upload/FormImg",

success:function(result){

if (result.Success) {

var imglist =result.Data;

for(var i in imglist){

$("#imglist").append('');

}

}else{

alert('提交失敗,重新嘗試提交');

}

}

})

};

方式三:

function uplpadfile(){

$("#myform").ajaxSubmit(function(result){

if (result.Success) {

var imglist =result.Data;

for(var i in imglist){

$("#imglist").append('');

}

}else{

alert('提交失敗,重新嘗試提交');

}

});

};

前端這里,要注意幾點(diǎn):

1、Form表中一定要加上??enctype="multipart/form-data"??標(biāo)簽

2、文件上傳的 file 控件上,如果要一次上傳多張圖片,需要加上?multiple?標(biāo)簽

3、方式一中:?formdata.append("files", files[i])?? 的??files? 必須和接口接受文件的參數(shù)名一致

4、方式二和方式三中:? 中的name?必須和接口接受文件的參數(shù)名一致

通過Form提交文件的方式總結(jié):

前端提交文件的三種方式都可以使用。

如果文件需要和表單中其他數(shù)據(jù)一起提交,可以使用方式二和方式三。

如果只要單獨(dú)提交一個(gè)文件數(shù)據(jù),可以使用方式一。

====================華麗的分割線====================

方式二:通過Base64字符上傳

后端:

///

/// 文件上傳,Base64

///

/// Base64

/// 文件名

///

[HttpPost]

[Route("Upload/Base64")]

public ActionResult UploadBase64(string fileBase64, string fileName)

{

byte[] bytes = fileBase64.ToBytes_FromBase64Str();

var fileExtension = Path.GetExtension(fileName);

var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得時(shí)間字符串

var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位隨機(jī)數(shù)

var saveName = strDateTime + strRan + fileExtension;

var savePath = "Upload/Img/" + DateTime.Now.ToString("yyyyMMdd") + "/" + saveName;

string filePath = "https://oss.tiaobox.com/" + savePath;

try

{

//將文件上傳到阿里云oss

using (MemoryStream m = new MemoryStream(bytes))

{

var client = new OssClient(aliyunconfig.EndPoint, aliyunconfig.AccessKeyID, aliyunconfig.AccessKeySecret);

PutObjectRequest _objRequest = new PutObjectRequest(aliyunconfig.BucketName, savePath, m);

client.PutObject(_objRequest);

}

return Success(filePath);

}

catch (Exception ex)

{

WriteSysLog(ex.ToString(), Entity.Base_SysManage.EnumType.LogType.接口調(diào)用異常);

return Error("上傳失敗!");

}

}

這個(gè)后端方法,每次只能上傳一個(gè)文件,前端需要把文件轉(zhuǎn)成Base64的字符提交。

這里保存數(shù)據(jù)的方式,是保存到阿里云的OSS上,也可以采用上面的方法,保存的本地。最終都是返回文件的路徑。

前端:

.Net Core WebApi圖片上傳

通過文件轉(zhuǎn)為Base64字符提交

$("#basefile").change(function(){

var basefile = base64(document.getElementById("basefile"));

})

//上傳文件

function updateBackground(filename,imgurl){

//提交前,去除格式標(biāo)記

imgurl = imgurl.replace("data:image/jpeg;base64,", "").replace("data:image/png;base64,", "").replace("data:image/jpg;base64,", "").replace("data:image/gif;base64,", "").replace("data:image/bmp;base64,", "");

// urlElement.innerHTML = imgurl;

var businessParam = {

fileBase64:imgurl,

fileName:filename

};

$.ajax({

url:'https://localhost:44376/Upload/Base64',

data:businessParam,

type:'post',

dataType:'json',

success:function(result){

if (result.Success) {

alert("上傳成功");

}else{

alert("上傳失敗");

}

},

error: function(data) {

alert("error:"+data.Error);

}

})

}

//文件轉(zhuǎn)為Base64

function base64(file) {

if (typeof (FileReader) === 'undefined') {

alert("抱歉,你的瀏覽器不支持 FileReader,請(qǐng)使用現(xiàn)代瀏覽器操作!");

}

var reader = new FileReader();

var pos = file.files[0].name.lastIndexOf(".");

var type = file.files[0].name.substring(pos + 1);

//判斷文件格式

if (type.toLowerCase() != "png" && type.toLowerCase() != 'jpg' && type.toLowerCase() != 'jpeg' && type.toLowerCase() != 'gif' && type.toLowerCase() != 'bmp') {

alert("格式錯(cuò)誤,請(qǐng)上傳'png、jpg、jpeg、bmp、gif'格式文件");

return;

}

reader.onloadend = (

function(e) {

imgurl = e.target.result;

updateBackground(file.files[0].name,imgurl);

}

);

// Read the file

reader.readAsDataURL(file.files[0]);

}

這里需要注意的是文件在前端轉(zhuǎn)成Base64字符后,需要在字符的前面去掉文件的格式標(biāo)簽。不然到后端會(huì)無(wú)法正常讀取Base64的字符。

或者在后端接收數(shù)據(jù)后,做處理也可以。

補(bǔ)充:

_hostingEnvironment的定義

private readonly IHostingEnvironment _hostingEnvironment;

public UploadController(IHostingEnvironment hostingEnvironment,IOptions _aliyunconfig)

{

_hostingEnvironment = hostingEnvironment;

aliyunconfig = _aliyunconfig.Value;

}

ToBytes_FromBase64Str? 是對(duì)? String 類的方法擴(kuò)展

public static byte[] ToBytes_FromBase64Str(this string base64Str)

{

return Convert.FromBase64String(base64Str);

}

如果有什么錯(cuò)誤或者欠缺的地方,歡迎指正,互相學(xué)習(xí)。

文章參考,里面還有講述關(guān)于大文件的上傳:

https://www.cnblogs.com/seabluescn/p/9229760.html

轉(zhuǎn):https://www.cnblogs.com/leoxuan/articles/11087121.html

總結(jié)

以上是生活随笔為你收集整理的core webapi缩略图_.Net Core WebApi上传图片的两种方式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。