[转载]Javascript—七牛云存储功能之浏览器文件上传

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_42187261/article/details/80319176
1、添加js文件

   
   
  1. <script type="text/javascript" src="/resources/js/jquery/jquery-1.7.min.js"> </script>
  2. <script type="text/javascript" src="/resources/js/qiniu/qiniu.min.js"> </script>
  3. <%
  4. String path = request.getContextPath();
  5. String basePath = request.getScheme() + "://"                        //获取路径
  6.         + request.getServerName() + ":" + request.getServerPort()
  7.         + path + "/";
  8. %>

2、所需jar包


   
   
  1. <dependencies>
  2. <dependency>
  3. <groupId>com.qiniu </groupId>
  4. <artifactId>qiniu-java-sdk </artifactId>
  5. <version>7.2.11 </version>
  6. <scope>compile </scope>
  7. </dependency>
  8. <dependency>
  9. <groupId>com.squareup.okhttp3 </groupId>
  10. <artifactId>okhttp </artifactId>
  11. <version>3.3.1 </version>
  12. <scope>compile </scope>
  13. </dependency>
  14. <dependency>
  15. <groupId>com.google.code.gson </groupId>
  16. <artifactId>gson </artifactId>
  17. <version>2.6.2 </version>
  18. <scope>compile </scope>
  19. </dependency>
  20. <dependency>
  21. <groupId>com.qiniu </groupId>
  22. <artifactId>happy-dns-java </artifactId>
  23. <version>0.1.4 </version>
  24. <scope>compile </scope>
  25. </dependency>
  26. <dependency>
  27. <groupId>junit </groupId>
  28. <artifactId>junit </artifactId>
  29. <version>4.12 </version>
  30. <scope>test </scope>
  31. </dependency>
  32. </dependencies>

3、html代码


   
   
  1. <input type="file" id="frontImg" name="myfiles" accept="image/*" οnchange="ajaxFileUpload(this)">
  2. <img src="#" alt="" id="img">
4、JS代码

   
   
  1. function ajaxFileUpload(obj) {
  2.     var fileName = $(obj).val();                                 //上传的本地文件绝对路径
  3. var suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length); //后缀名
  4. var file = $(obj).get(0).files[0];                                         //上传的文件
  5. var size = file.size > 1024 ? file.size / 1024 > 1024 ? file.size / (1024 * 1024) > 1024 ? (file.size / (1024 * 1024 * 1024)).toFixed(2) + 'GB' : (file.size
  6.     / (1024 * 1024)).toFixed(2) + 'MB' : (file.size
  7. / 1024).toFixed(2) + 'KB' : (file.size).toFixed(2) + 'B'; //文件上传大小
  8.     //七牛云上传
  9.    $.ajax({
  10.         type:'post',
  11.         url: " <%=basePath%>QiniuUpToken",
  12.         data:{"suffix":suffix},
  13.         dataType:'json',
  14.         success: function(result){
  15.             if(result.success == 1){
  16.                 var observer = {                         //设置上传过程的监听函数
  17.                     next(result){                        //上传中(result参数带有total字段的 object,包含loaded、total、percent三个属性)
  18.                        Math.floor(result.total.percent); //查看进度[loaded:已上传大小(字节);total:本次上传总大小;percent:当前上传进度(0-100)]
  19.                     },
  20.                     error(err){                          //失败后
  21.                        alert(err.message);
  22.                     },
  23.                     complete(res1){                      //成功后
  24.                          //****:填写你的绑定域名或七牛云提供的测试域名
  25.                          //?imageView2/2/h/100:展示缩略图,不加显示原图
  26.                         $("#img").attr("src","****/"+result.imgUrl+"?imageView2/2/h/100");
  27.                     }
  28.                 };
  29.                 var putExtra = {
  30.                     fname: "",                          //原文件名
  31.                    params: {},                         //用来放置自定义变量
  32.                     mimeType: null                      //限制上传文件类型
  33.                 };
  34.                 var config = {
  35.                     region:qiniu.region.z0,             //存储区域(z0: 代表华东;不写默认自动识别)
  36.                     concurrentRequestLimit:3           //分片上传的并发请求量
  37.                 };
  38.                 var observable = qiniu.upload(file,result.imgUrl,result.token,putExtra,config);
  39.                 observable.subscribe(observer)          // 上传开始
  40.             }else{
  41.               alertMsg(result.message);                 //获取凭证失败
  42.             }
  43.         },error:function(){                             //服务器响应失败处理函数
  44.               alertMsg("服务器繁忙");
  45.       }
  46.     });
  47.  }

5、后台代码


   
   
  1. /**
  2. * 七牛云上传生成凭证
  3. * @param request
  4. * @param response
  5. * @throws Exception
  6. */
  7. @Controller
  8. public class QiniuUpload {
  9. @RequestMapping("QiniuUpToken")
  10. public void QiniuUpToken(@RequestParam String suffix,HttpServletRequest request, HttpServletResponse response) throws Exception{
  11. PrintWriter out = null;
  12. Map <String,Object> result = new HashMap <String,Object>();
  13. try {
  14. String accessKey = "****"; //访问秘钥
  15. String secretKey = "****"; //授权秘钥
  16. String bucket = "****"; //存储空间名称
  17. Auth auth = Auth.create(accessKey, secretKey); //验证七牛云身份是否通过
  18. out = response.getWriter();
  19. //生成凭证
  20. String upToken = auth.uploadToken(bucket);
  21. result.put("token", upToken);
  22. // 是否可以上传的图片格式
  23. /*boolean flag = false;
  24. String [] imgTypes= new String[]{"jpg","jpeg","bmp","gif","png"};
  25. for(String fileSuffix :imgTypes) {
  26. if(suffix.substring(suffix.lastIndexOf(".") + 1).equalsIgnoreCase(fileSuffix)) {
  27. flag = true;
  28. break;
  29. }
  30. }
  31. if(!flag) {
  32. throw new Exception("图片:" + suffix + " 上传格式不对!");
  33. }*/
  34. //生成实际路径名
  35. String randomFileName=UUID.randomUUID().toString() +suffix;
  36. result.put("imgUrl", randomFileName);
  37. result.put("success", 1);
  38. out.write(JsonUtil.objectToJson(result));
  39. } catch (Exception e) {
  40. result.put("success", 0);
  41. result.put("message", "获取凭证失败,"+e.getMessage());
  42. out.write(JsonUtil.objectToJson(result));
  43. }
  44. }
  45. }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值