多图片上传操作小结

多图片上传也是现实中应用场景比较多的功能,如淘宝的商品宣传图、各种app的轮播图、商业网站的宣传图片等。
其实实现原理也很简单,本质上还是利用单图片上传的功能来实现。

接下来我会展示三个部分的代码:HTML、JS、后端接口。需要的同学可以直接CV即可,注意修改下其中的参数。(但还是比较推荐看下其中的实现原理,理解原理才能更好的运用技术)

一、HTML页面

需要特别说明的是,多图片上传时,预览图片都会被放到

该标签下。

 

<div class='col-md-6 margin-bottom-15'>
	<label for='detailphoto' class='control-label'>
	//轮播图
	</label>
	//表单元素,用于保存多图片地址(地址直接用','拼接)
	<input type="hidden" class="form-control" id="detailphoto" value=""/>
	<div class="layui-upload">
		//上传按钮
		<button type="button" class="layui-btn" id="test2">上传图片</button> 
		<blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
			//预览图片区域
			<div class="layui-upload-list" id="demo2">
			</div>
		</blockquote>
	</div>
</div>

二、JS页面

1.点击上传后,先清空预览图片和表单信息。
2.再执行上传操作
3.上传成功后,将图片地址进行拼接。然后将拼接完成的字符串放入表单元素中

layui.use('upload', function(){
//轮播图上传
//上传成功数量
var n = 0;
	upload.render({
		elem: '#test2'
                //上传接口
		,url: baseUrl + '/system/upload/uploadFile?token=' + getCookie('info').token
		,multiple: true
		//上传前回调
		,before: function(obj){
			layer.load(1);
			if(n == 0) {
				//清空预览图片
				$('#demo2').empty();
				$("#detailphoto").val("");
			}
			obj.preview(function(index, file, result){
				//添加预览图片
				$('#demo2').append('<img src="'+ result +'" alt="'+ file.name +'" class="layui-upload-img" style="width: 100px;height: 100px;" >&nbsp;&nbsp;');
			});
		}
		//每个文件提交一次触发一次。
		,done: function(res){
			if(res.code > 0){
				return layer.msg('上传失败');
			}else{
				layer.msg('上传成功' + (++n) + '张');
				$("#detailphoto").val($("#detailphoto").val() + res.body.uploadFilePath + ",");
			}
		}
		//全部上传完成后的回调
		,allDone: function(obj){
			layer.closeAll('loading');
		}
	});
});

三、后台接口

一般公司实际项目中,图片服务器和web服务器分离。这样可以提供web服务器的性能,同时便于对图片等静态资源进行管理。
本项目的图片服务器是采用阿里云的OSS服务,官方文档请转至https://help.aliyun.com/document_detail/32013.html?spm=a2c4g.11186623.6.729.2d25c06dW7jZ1D

注:公司框架是采用SpringBoot+SpringCloud,所以会有@controller、@RequestMapping等注解。小伙伴们根据自己需要修改即可。

/**
 * 上传文件Controller
 * @author 梁钟
 * @date 2018-04-20
 */
@Controller
@RequestMapping("/system/upload")
public class UploadFileController {
	
	//服务区域
	private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";// <endpoint, http://oss-cn-hangzhou.aliyuncs.com>
	//服务账号
	private static String accessKeyId = "LTAI5kjNIRwTo70w";// <accessKeyId>
	//服务密码
	private static String accessKeySecret = "eznYw02pUzF8sYaxIGKlW23uX0XDwz";// <accessKeySecret>
	//存储位置
	private static String bucketName = "bb269e6e-4516-f8be-b132-8019100a4763";// <bucketName>

	
	/**
	 * 上传图片
	 * @param uploadFile
	 * @return
	 * @throws Exception
	 */
	public static Map<String, Object> QRcodeUpload(InputStream in) throws Exception {
		// 上传
		long startTime = System.currentTimeMillis();// 开始时间
		String key = new SimpleDateFormat("yyyyMMdd").format(new Date()) + "/"
				+ UUID.randomUUID().toString();// oss文件名(Object Name)
//				+ UUID.randomUUID().toString().replaceAll("-", "").substring(0, 32);// oss文件名(Object Name)
		/*
		 * Constructs a client instance with your account for accessing OSS
		 */
		OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		try {
			// new对象元信息
			ObjectMetadata meta = new ObjectMetadata();
			// 设置contentType
			meta.setContentType("image/jpeg");
			// 上传文件
			ossClient.putObject(bucketName, key, in, meta);
		} catch (OSSException oe) {
			System.out.println("Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.");
		} catch (ClientException ce) {
			System.out.println("Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.");
		} finally {
			/*
			 * Do not forget to shut down the client finally to release all allocated resources.
			 */
			ossClient.shutdown();
		}
		long endTime = System.currentTimeMillis();// 结束时间
		// 出参
		String baseFilePath = "http://bb269e6e-4516-f8be-b132-8019100a4763.oss-cn-hangzhou.aliyuncs.com/";
		Map<String, Object> respMap = new HashMap<String, Object>();
//		respMap.put("uploadFileName", uploadFile.getOriginalFilename());// 文件名称
		respMap.put("uploadFilePath", baseFilePath + key);// 访问路径
		RespBean<Map<String, Object>> respBean = new RespBean<Map<String, Object>>();
		respBean.setBody(respMap);
		System.err.println("\n上传耗时:" + (endTime - startTime)/1000.0 + "s");
		System.err.println("访问路径:" + respMap.get("uploadFilePath"));
		return respMap;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值