html+js上传文件


WEB页面开发功能中,需要用到一个图片上传功能,页面选择图片,上传并保存到后台,页面图片上传后,得到一个URL,把URL存入数据库中

html代码

HTML 全选
<label type="button" class="btn btn-primary m-0" for="selectImage">选择图片</label>
<input id="selectImage" type="file" accept=".png,.jpg,.jpeg" style="display:none;">

JS代码

JavaScript 全选
$(`input[type="file"]`).change(function(){
	var files = $(this).prop('files')
	var type = $(this).data("type")

	if (files.length > 0) {
		file = files[0];

		if (isImageFile(file)) {

			var reader = new FileReader();
			reader.onload = () => {
				//$("#img-background").attr("src", reader.result);
				upLoadH5Img(reader.result,type)
				reader.onload = null;
			};
			reader.readAsDataURL(file);

		}
	}
})

// 判断文件是否是图片
function isImageFile(file) {

	if (file.type) {
		return /^image\/\w+$/.test(file.type);
	} else {
		return /\.(jpg|jpeg|png|gif)$/.test(file);
	}
};

function upLoadH5Img(base64,tukutype) {
	var url='/api/uploadheadimg'
	// 方法2:上传oos
	const xhr = new XMLHttpRequest()
	xhr.withCredentials = false
	xhr.open('POST', url)
	// xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;charset=utf-8')
	//xhr.setRequestHeader('x-token', this.$store.getters.token)
	xhr.upload.onprogress = function (e) {
		//progress(e.loaded / e.total * 100)
	}

	xhr.onload = function () {
		if (xhr.status === 403) {
			failure('HTTP Error: ' + xhr.status, { remove: true })
			return
		}
		if (xhr.status < 200 || xhr.status >= 300) {
			failure('HTTP Error: ' + xhr.status)
			return
		}
		const json = JSON.parse(xhr.responseText)
		if (!json || typeof json.url !== 'string') {
			failure('Invalid JSON: ' + xhr.responseText)
			return
		}

		//const file = json.data
		//const url = '/purchase/manage/attachment/public/operation/pull?path=' + file.fileName + '&fileName=' +
		//    encodeURIComponent(file.originalFileName)
		$("#url").val(json.url)
	}

	xhr.onerror = function () {
		failure('Image upload failed due to a XHR Transport error. Code: ' + xhr.status)
	}
	var v = convertBase64ToBlob(base64);
	const formData = new FormData()
	formData.append('file', v, 'img.jpeg')

	xhr.send(formData)
}

 

JS通用上传函数

JavaScript 全选
function UploadImg(url,file,callback_success,callback_error){
	// 方法2:上传oos
	const xhr = new XMLHttpRequest()
	xhr.withCredentials = false
	xhr.open('POST', url)

	//xhr.upload.onprogress = function (e) {
	//    progress(e.loaded / e.total * 100)
	//}

	xhr.onload = function() {

		if (xhr.status != 200) {
			if(callback_error)
				callback_error('HTTP Error: ' + xhr.status)
			return
		}

		const json = JSON.parse(xhr.responseText)
		if (!json || typeof json.url !== 'string') {
			if(callback_error)
				callback_error('Invalid JSON: ' + xhr.responseText)
			return
		}

		// 上传成功回调
		if(callback_success) callback_success(json.url)
	}

	xhr.onerror = function() {
		if(callback_error)
				callback_error('图片上传失败 HTTP Error: ' + xhr.status)
	}

	const formData = new FormData()
	formData.append('file', file, file.name)

	xhr.send(formData)
}

使用:

JavaScript 全选
$("#selectImage").change(function () {
    var files = $(this).prop('files')
    if (files.length > 0) {
        file = files[0];
        if (isImageFile(file)) {
            var upload_url = '/uploadurl'
            UploadImg(upload_url, file, (url) => {
                console.log('图片URL地址:' + url)

            }, (err) => {
                GZDialog.alert(err)
            })
        }
        // 清除选择
        $("#selectImage")[0].value = null;
    }
})

C#上传代码实现

C# 全选
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
	openFileDialog.Filter = "(*.jpg,*.png,*.jpeg,*.bmp,*.gif)|*.jgp;*.png;*.jpeg;*.bmp;*.gif";
	if (openFileDialog.ShowDialog() == DialogResult.OK)
	{
		string url = txt_host.Text + "/api/upload/" + cmb_Type.SelectedValue;
		RestClient client = new RestClient(url);
		client.Timeout = -1;
		var request = new RestRequest(Method.POST);
		foreach (var v in cookies)
		{
			request.AddParameter(v.Name, v.Value, ParameterType.Cookie);
		}
		string imgFileName = openFileDialog.FileName;
		//string imgName = System.IO.Path.GetFileName(imgFileName);
		request.AddFile("file", imgFileName);
		IRestResponse response = client.Execute(request);
		Console.WriteLine(response.Content);
	}
}

后台API代码

C# 全选
[HttpPost]
public HDFile ArticleImageNoMask(IFormFile file, bool compression = false)
{
	string dir = PathProvider.GetRootArticleImage();
	var data = SaveImage(file, dir, false, compression);
	var tag = "article_image";
	AddDB(data, tag);
	return new HDFile(data.fileName, $"/images/{tag}/{data.fileName}", "");
}
ImageInfoModel SaveImage(IFormFile file, string dir, bool enableImageMask, bool compression = true)
{
	//如果路径不存在,创建路径
	if (!Directory.Exists(dir))
		Directory.CreateDirectory(dir);
	ImageInfoModel data = new ImageInfoModel();
	data.relativePath = RelativePath(dir);
	var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
	var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
	data.fileID = strDateTime + strRan;
	using (var memoryStream = new MemoryStream())
	{
		file.CopyTo(memoryStream);
		using (var img = Image.FromStream(memoryStream))
		{
			//文件后缀
			data.extension = "." + img.RawFormat.ToString().ToLower();
			string filename = dir + "\\" + data.fileName;
			img.Save(filename);
		}
	}
	return data;
}

public class HDFile
{
	public HDFile(string name, string url, string size)
	{
		Name = name;
		Url = url;
		Size = size;
	}
	public string Name { get; set; }
	public string Url { get; set; }
	public string Size { get; set; }
}

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:JS清除Input File 的选择文件 javascript清除Input File选择文件
下一篇:自己创造一个格式,自定义文件后缀名
评论列表

发表评论

评论内容
昵称:
关联文章

html+js文件
页面快排插件配置支持图片
C# RestSharp和下载图片
批处理nuget包脚本
VS打包的nuget包无法nuget官网
当动态桌面遇 HTML5
vue打包js文件添加hash
RestSharp文件AddFile无效的解决方案
VS调试运行ASP.NET MVC项目,静态资源图片404问题,Debug路径
JS清除Input File 的选择文件 javascript清除Input File选择文件
ASP.NET Core MVC 在过滤器ActionFilter中保存页面的生成的html静态页面文件
Electron edge.js配置
three.js
C#图片添加水印
批处理nuget包脚本
无法处理文件 **.resx,因为它位于 Internet 或受限区域中,或者文件具有 Web 标记。要想处理这些文件,请删除 Web 标记。
如何运行.ipynb文件
gulp处理LESS,以及js压缩
C#根据文件流判断文件类型
雲瑞文件直链分享软件

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码