javaScript 上传图片(oss阿里云)

最近项目有这个这块的需求,简单的记录一下使用过程,以便以后学习、使用。

直接上干货分享:

思路:前端js获取 oss上传图片的url地址,将url以json数组形式传入后台,后台json解析将数据存入数据库(这里用的是fastjson)

使用步骤:

1、前端页面有图片上传的图标,并且增加图片上传的input隐藏域,便于拿到上传的图片信息

            <div class="middle_div3">
 <img src="../img/iconn01.png" id="upload_img" class="img_2" />
 <span id="num">0/3</span>

     </div>

            <input type="hidden" name="fold" value="photo" style="display: none;">
    <input type="file" size="30" class="file-img" name='file' id="ossfile" capture="camera"                 accept="image/gif,image/jpeg,image/jpg,image/png,image/svg" style="display: none;">

    <span id="progress-bar" style="display: none;"></span>

2、引入阿里云官方提供的javaScript库,在js中配置自己的阿里云账号等一些信息

        <script type="text/javascript" src="http://gosspublic.alicdn.com/aliyun-oss-sdk.min.js "></script>

<script type="text/javascript" src="../js/oss.js"></script>

3、获取上传图片的url,控制图片为3个

 

                // oss图片上传
//判断安卓还是ios 
var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
$(".img_2").click(function() {
if(isiOS) {
$('#ossfile').removeAttr("capture");
$("#ossfile").click();
}
$("#ossfile").click();
})

//获取上传图片的url

 

var img_list = []; //图片url地址数组
var num = 0;
function outDone(f_url) {  //输出url
var content = '<img src="' + f_url + '"  class="img_2"/>'
$('.middle_div3 img:last').before(content);
img_list.push({"file_value": f_url}); //将json格式的数据存入数组
num++;
$("#num").html(num + '/3');
if(img_list.length == 3) {
$("#upload_img").hide();
}  
return f_url;

 

}

4、将url数组转换为json字符串数组,传入controller接口中,做业务逻辑,存入数据库,便于记录查询

 

var  json_body = JSON.stringify(img_list);

$.ajax({

type: "post",
url: "http://localhost/estuary-busi/index/submit_xwzl_info.do",
async: true,
data: {
user_id: user_id,
title: title,
type_name: type_name,
content: content,
json_body: json_body,
community_id: community_id
},
dataType: "json",
success: function(result) {
msg("发布成功");
window.location.reload();
},
error: function() {
console.log("获取失败");
}
});

ps:  oss.js 相关内容

'use strict';
var appServer = 'http://47.96.71.3:7103/index2/getSt.do';
var bucket = 'kyky';
var region = 'oss-cn-beiji';
var domain = 'http://kyyy.oss-cn-beijin.aliyuncs.cm';

var urllib = OSS.urllib;
var Buffer = OSS.Buffer;
var OSS = OSS.Wrapper;

document.getElementById('ossfile').onchange = function() {
applyTokenDo(uploadFile);
}

var applyTokenDo = function (func) {
var url =appServer;
return urllib.request(url, {
   method: 'GET'
}).then(function (result) {
    var creds = JSON.parse(result.data).result_info;
    var client = new OSS({
      region: region,
      accessKeyId: creds.AccessKeyId,
      accessKeySecret: creds.AccessKeySecret,
      stsToken: creds.SecurityToken,
      bucket: bucket
    });
    return func(client);
});
};

var progress = function (p) {
 return function (done) {
   var bar = document.getElementById('progress-bar');
   bar.style.width = Math.floor(p * 100) + '%';
   bar.innerHTML = Math.floor(p * 100) + '%';
   done();
 }
}; 
var uploadFile = function (client) {
 var file = document.getElementById('ossfile').files[0];
 if(file==null){
 return;
 }
 var timestamp=new Date().getTime();
 var key = "product/"+timestamp+"."+file.name.split(".")[1];
 //console.log(file.name + ' => ' + key);
 return client.multipartUpload(key, file, {
   progress: progress
 }).then(function (res) {
var fileUrl="";
if(res.url!=null){
fileUrl=res.url;
}else{
fileUrl=domain+"/"+res.name;
}
//console.log(fileUrl);
outDone(fileUrl);   //获取图片上传的url地址
   //console.log('upload success: %j', res);
   return null;
 });
};
 

java:controller相关代码

/**
* 意见反馈

* @param user_id
*            用户编码
* @param title
*            标题
* @param type_name
*            类型名称
* @param content
*            内容
* @param json_body
*            图片数据(Json字符串数组)
* @param community_id
*            小区编码
* @return map
*/
@RequestMapping(value = "submit_yjfk_info")
@ResponseBody
public Map<String, Object> submit_yjfk_info(String user_id, String title, String type_name, String content,
String community_id, String json_body) {
if (StringUtils.isBlank(user_id)) {
throw new BusinessException("账户异常");
}
Map<String, Object> map = new HashMap<String, Object>();
String deal_id = dealInfoService.saveDealInfo(user_id, title, type_name, content, community_id);
List<UserInfoAtt> arrlist = JSON.parseArray(json_body, UserInfoAtt.class);
if (!CollectionUtils.isEmpty(arrlist)) {
for (UserInfoAtt att : arrlist) { 
userInfoAttService.saveUserInfoAtt(user_id, "意见反馈图片", att.getFile_value(), 3, deal_id);
}
}
 
map.put("deal_id", deal_id);
return map;
}

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Vue3是一种流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定、组件化开发和虚拟DOM等特性,使得开发者可以更高效地构建交互式的Web应用程序。 要在Vue3中实现上传图片阿里云OSS,你可以按照以下步骤进行操作: 1. 安装依赖:首先,你需要安装阿里云OSSJavaScript SDK。可以使用npm或yarn命令来安装,例如: ``` npm install ali-oss ``` 2. 配置OSS客户端:在Vue3的代码中,你需要创建一个OSS客户端实例,并配置相关参数,如AccessKeyId、AccessKeySecret、Endpoint等。这些参数可以在阿里云OSS控制台中获取。 3. 创建上传组件:在Vue3中,你可以创建一个上传组件,用于选择图片文件并触发上传操作。可以使用`<input type="file">`元素来实现文件选择功能,并监听其`change`事件。 4. 上传图片:在上传组件中,你可以编写上传图片的逻辑。当用户选择了图片文件后,你可以通过OSS客户端调用`put`方法来上传图片文件到阿里云OSS。 下面是一个简单的示例代码,演示了如何在Vue3中上传图片阿里云OSS: ```javascript <template> <div> <input type="file" @change="handleFileChange"> </div> </template> <script> import OSS from 'ali-oss'; export default { methods: { handleFileChange(event) { const file = event.target.files[0]; const client = new OSS({ accessKeyId: 'your-access-key-id', accessKeySecret: 'your-access-key-secret', bucket: 'your-bucket-name', region: 'your-oss-region', // 其他配置参数... }); // 生成唯一的文件名 const fileName = Date.now() + '-' + file.name; // 调用OSS客户端的put方法上传文件 client.put(fileName, file).then(response => { console.log('上传成功', response); // 在这里可以处理上传成功后的逻辑 }).catch(error => { console.error('上传失败', error); // 在这里可以处理上传失败后的逻辑 }); } } } </script> ``` 请注意,上述代码中的`your-access-key-id`、`your-access-key-secret`、`your-bucket-name`和`your-oss-region`需要替换为你自己的阿里云OSS相关信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值