原生 js 上传图片
js
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>js上传图片</title>
</head>
<body>
<input id="file" type="file"> <script type="text/javascript">
window.onload = function myfunction() {
var input = document.getElementById('file');
input.onchange = function () {
var files = this.files;
for (var i = 0, len = files.length; i < len; i++) {
var file = files[i];
//file.name || file.fileName => 文件名称
//file.size || file.fileSize => 文件大小
upload_html5(file);
}
};
} function upload_html5(file) {
//html5 上传
var xhr = new XMLHttpRequest();
//上传进度事件
xhr.upload.addEventListener("progress", function (e) { }, false);
//上传完成(成功)事件
xhr.addEventListener("load", function (e) {
//获取服务器响应
var obj = JSON.parse(e.target.responseText);
if (obj.code == 200) {
alert("上传成功");
}
else {
alert(obj.message);
}
}, false);
//上传失败事件
xhr.addEventListener("error", function (e) {
console.log(e);
alert("上传失败");
}, false);
//上传中断(取消)事件
xhr.addEventListener("abort", function (e) {
alert("上传取消");
}, false); var fd = new FormData;
//添加要上传的文件对象
fd.append("file", file);
fd.append("hallName", '分会场1');
fd.append("dateTime", '2019-06-21');
xhr.open("POST", "/Common/UploadFile");
xhr.send(fd);
}
</script>
</body>
</html>
C#
public ActionResult UploadFile()
{
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory;
var directory = string.Format("{0}/Upload/{1}/", baseDirectory, Request.Form["hallName"]);
if (!Directory.Exists(directory))
Directory.CreateDirectory(directory); var file = Request.Files[];
var fileTypes = new string[] { "image/jpeg", "image/gif", "image/png" };
if (!fileTypes.Contains(file.ContentType))
return Json(new Response(, "只可上传图片")); Image img = Image.FromStream(file.InputStream);
var filePath = string.Format("{0}/{1}.jpg", directory, Request.Form["dateTime"]);
ImageCompress(img, filePath, );
return Json(new Response());
}
/// <summary>
/// 将图片按百分比压缩
/// </summary>
public static bool ImageCompress(Image source, string savePath, byte percent)
{
var parameters = new EncoderParameters();
parameters.Param[] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, new long[] { percent });
try
{
ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageDecoders();
ImageCodecInfo jpegICIinfo = arrayICI.SingleOrDefault(a => a.FormatDescription.Equals("JPEG", StringComparison.OrdinalIgnoreCase));
if (jpegICIinfo != null)
source.Save(savePath, jpegICIinfo, parameters);
else
source.Save(savePath, source.RawFormat);
return true;
}
catch (Exception ex)
{
return false;
}
finally
{
source.Dispose();
}
}
原生 js 上传图片的更多相关文章
- 原生js上传图片遇到的坑(axios封装)
后台给我写了一个上传图片的接口,自己用form表单测试成功 接口可以正常跳转 测试的代码: <!doctype html> <html lang="en"> ...
- 原生js上传图片时的预览
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- 原生js上传图片
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 原生js复制粘贴上传图片前后台代码,兼容firebox,chrome, ie11,亲测有效
需求:粘贴上传图片,截图工具,右键粘贴,或者ctrl+v粘贴 方法1:可直接套用富文本框的图片上传功能,完成复制粘贴 缺点:麻烦,样式难控制 方法2:用原生js完成,以下案例基于此,样式请自己动手调整 ...
- 纯原生js移动端图片压缩上传插件
前段时间,同事又来咨询一个问题了,说手机端动不动拍照就好几M高清大图,上传服务器太慢,问问我有没有可以压缩图片并上传的js插件,当然手头上没有,别慌,我去网上搜一搜. 结果呢,呵呵...诶~又全是基于 ...
- 原生js开发,无依赖、轻量级的现代浏览器图片懒加载插件,适合在移动端开发使用
优势 1.原生js开发,不依赖任何框架或库 2.支持将各种宽高不一致的图片,自动剪切成默认图片的宽高 比如说你的默认图片是一张正方形的图片,则各种宽度高度不一样的图片,自动剪切成正方形. 完美解决移动 ...
- 原生js实现图片预览并上传
最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...
- 原生JS实现拼图游戏
最近无聊,练练原生JS:实现拼图游戏.两种玩法:第一种是单击元素进行交换位置:第二种是拖拽元素进行位置交换.首先需要上传图片并进行回显(需要用到FileReader):下面是部分截图: 可以自行设置切 ...
- 原生JS封装Ajax插件(同域&&jsonp跨域)
抛出一个问题,其实所谓的熟悉原生JS,怎样的程度才是熟悉呢? 最近都在做原生JS熟悉的练习... 用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的...简单说说思路,如有不正 ...
随机推荐
- 【黑金教程笔记之006】【建模篇】【Lab 05 SOS信号之一】—笔记
sos_module.v是产生SOS信号的功能模块.即有次序的输出莫斯码:点.画.间隔.control_module.v是一个定时触发器,每一段时间使能sos_module.v. 模块: /***** ...
- bzoj 3894 文理分科【最小割+dinic】
谁说这道和2127是双倍经验的来着完全不一样啊? 数组开小会TLE!数组开小会TLE!数组开小会TLE! 首先sum统计所有收益 对于当前点\( (i,j) \)考虑,设\( x=(i-1)*m+j ...
- 【OpenJ_Bailian - 4001】 Catch That Cow(bfs+优先队列)
Catch That Cow Descriptions: Farmer John has been informed of the location of a fugitive cow and wan ...
- Oracle - RMAN备份 之 incarnation的实验和小结
对于RMAN恢复我一直都不是很明白,因为,老是搞不清楚不完全恢复该怎么进行,今天,通过这个实验即是对不完全恢复的实践,也是希望搞清楚incarnation到底是怎么工作的.很可惜,本人对Oracle的 ...
- Go 使用自定义包(package)
自定义包的分为两种: 1.同目录下的包: 2.不同目录下的包: *经测试,同目录下是不可以用不同包的文件的 同目录下的包: 不同文件中的变量和函数都可以直接访问 不同目录下的包: 1.把要在自定义包外 ...
- 软件常用版本英文snapshot和ga
版本号,顾名思义,系统.架包.软件的标识号.版本号的数字信息通俗易懂, 格式:主版本号+次版本+(修正版本号build-可选)+(编译版本号-可选)+英文常见号(重点). 常见号:英文各种架包名,Ma ...
- Poj 2947 widget factory (高斯消元解同模方程)
题目连接: http://poj.org/problem?id=2947 题目大意: 有n种类型的零件,m个工人,每个零件的加工时间是[3,9],每个工人在一个特定的时间段内可以生产k个零件(可以相同 ...
- [hdu1695] GCD【莫比乌斯反演】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1695 先把题目转化为求一个数在区间[1, b / k],另一个数在区间[1, d / k]时,这两个数互 ...
- [USACO 2011 Dec Gold] Cow Calisthenics【二分】
Problem 1: Cow Calisthenics [Michael Cohen, 2010] Farmer John continues his never-ending quest to ke ...
- 【转】Java中,&&与&,||与|的区别
转自:http://blog.csdn.net/lishiyuzuji/article/details/8116516 在Java的逻辑运算符中,有这么四类:&&(短路与),& ...