图片上传阿里云(对象存储OSS)

一、资源

详细功能及使用方法,请参看“SDK手册 > Java-SDK”,
链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/

调用OSS Java SDK的方法时,
当错误发生时,OSS Java SDK的方法会抛出异常,异常中包括错误码、错误信息,详细请参看“SDK手册 > Java-SDK > 异常处理”,
链接地址是:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response

OSS控制台可以直观的看到您调用OSS Java SDK的结果,OSS控制台地址是:https://oss.console.aliyun.com/index#/
OSS控制台使用方法请参看文档中心的“控制台用户指南”指南的链接地址是:

https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide
 
OSS的文档中心地址:https://help.aliyun.com/document_detail/oss/user_guide/overview.html

OSS Java SDK的文档地址:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk

OSS开发过程中常见问题链接地址:https://help.aliyun.com/document_detail/32024.html?spm=5176.product31815.6.665.JuvIOS

OSS Java SDK依赖下列包:

  • aliyun-sdk-oss-2.2.1.jar
  • hamcrest-core-1.1.jar
  • jdom-1.1.jar
  • commons-codec-1.9.jar
  • httpclient-4.4.1.jar(重点--版本一致)
  • commons-logging-1.2.jar
  • httpcore-4.4.1.jar(重点--版本一致)
  • log4j-1.2.15.jar(是可选的,需要日志功能的时加入该包)

若果是maven工程。则直接添加依赖即可如:

    <!-- 注意版本很重要 -->

<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>2.2.3</version>
        </dependency>

二、上代码

//oss上传图片
    public void attrcompress() throws IOException {

            String str=attachmentService.Upload(request, null, false);//false用来判断是否需要上传高清图片

            response.getWriter().write(str);//返回图片地址

         }
//上传的方法
  public String Upload(HttpServletRequest request, String path, Boolean is_compress) {
            List<FileItem> files = ossService.analysis(request);//从页面拿到文件list集合

            ObjectNode resultMessage = JsonUtils.createObjectNode();//声明最后返回结果的josn字符串.
            /**
             * 开始遍历request中的文件
             */
            for (FileItem file : files) {//遍历文件集合
                if (file.getName() == null) {
                    InputStream iss = null;
                    continue;
                }
                String gid = DataUtils.getUUID();
                if (is_compress) {//压缩上传保存
                    Attachment attachment_compress = this.Img_compress(file, path, gid);
                    if (attachment_compress == null) {

                        return "操作失败1";
                    } else {
                        resultMessage.set("compressAttr", JsonUtils.beanToJsonObject(attachment_compress));
                        return resultMessage.toString();
                    }
                } else if (is_compress == false) {//原图上传保存
                    Attachment attachment_source = this.Img_source(file, path, gid);
                    if (attachment_source == null) {
                        return "操作失败2";
                    } else {
                        resultMessage.set("sourceAttr", JsonUtils.beanToJsonObject(attachment_source));
                    }
                } else {//原图和压缩全部上传保存
                    Attachment attachment_compress = this.Img_compress(file, path, gid);
                    Attachment attachment_source = this.Img_source(file, path, gid);
                    if (attachment_compress == null && attachment_source == null) {
                        return "操作失败3";
                    } else {
                        resultMessage.set("sourceAttr", JsonUtils.beanToJsonObject(attachment_source));
                        resultMessage.set("compressAttr", JsonUtils.
                                          beanToJsonObject(attachment_compress));
                        return resultMessage.toString();
                    }
                }
            }
            if (resultMessage.isNull()) {
                return "操作失败4";
            } else {
                return resultMessage.toString();
            }

        }

           //获取请求参数
        public List<FileItem> analysis(HttpServletRequest request) {
            List<FileItem> list = new ArrayList<FileItem>();
            try {
                DiskFileItemFactory factory = new DiskFileItemFactory();
                ServletFileUpload upload = new ServletFileUpload(factory);
                List<?> uploadFiles;
                //uploadFiles获取请求参数为空,缘为springMvc已配读取,此处为二次读取,所以为空
                uploadFiles = upload.parseRequest(request);
                Iterator<?> iterator = uploadFiles.iterator();
                while (iterator.hasNext()) {
                    Object object = iterator.next();
                    if (object instanceof FileItem) {
                        list.add((FileItem) object);
                    }
                }
            } catch (FileUploadException fue) {
//                log.error("文件上传请求数据解析失败", fue);
                 fue.printStackTrace();
            }
            return list;
        }
//处理文件流
     private Attachment Img_compress(FileItem file, String path, String gid) {
            String id = DataUtils.getUUID();
            if (path == null) {
                path = "/temp/" + id;
            }
            /**
             * 获取到图片格式
             */
            String attrName = file.getName();    // 附件的名称
            String attType = attrName.substring(attrName.lastIndexOf(".") + 1);
            /**
             * 获取到图片模块
             */
            String moudelName = file.getFieldName(); // 获得附件的模块名称
            /**
             * 定义压缩图的名称
             */
            String compressAttName = moudelName + "_compress" + "." + attType;//定义缩略图的名称

            /**
             * 开始压缩
             */
            int width = 500;
            int heigth = 500;
            ByteArrayInputStream in = null;

            try (ByteArrayOutputStream out = new ByteArrayOutputStream(file.get().length)) {
                Image img = ImageIO.read(file.getInputStream());
                if (img.getWidth(null) == -1) {
                    return null;
                } else {
                    int newWidth;
                    int newHeight;
                    double rate1 = ((double) img.getWidth(null)) / (double) width
                                           + 0.1;
                    double rate2 = ((double) img.getHeight(null)) / (double) heigth
                                           + 0.1;
                    // 根据缩放比率大的进行缩放控制
                    double rate = rate1 > rate2 ? rate1 : rate2;
                    newWidth = (int) (((double) img.getWidth(null)) / rate);  //将大于规定尺寸的图片缩小,将小于规定尺寸的图片放大
                    newHeight = (int) (((double) img.getHeight(null)) / rate);
                    BufferedImage tag = new BufferedImage(newWidth, newHeight,
                                                          BufferedImage.TYPE_INT_RGB);
                    img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH);
                    tag.getGraphics().drawImage(img.getScaledInstance(newWidth,
                                                                      newHeight,
                                                                      Image.SCALE_SMOOTH),
                                                0,
                                                0, null);
                    ImageWriter imgWrier;  //创建压缩的图片,用来编码和写入图像的抽象超类。此类必须由在 Java Image I/O 框架的上下文中写出图像的类为其创建子类。
                    ImageWriteParam imgWriteParams;
                    imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
                    imgWriteParams
                            = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(
                                    null);
                    imgWriteParams.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
                    imgWriteParams.setCompressionQuality(0.3f);
                    imgWriteParams.setProgressiveMode(ImageWriteParam.MODE_DISABLED);
                    ColorModel colorModel = ColorModel.getRGBdefault();
                    imgWriteParams.setDestinationType(
                            new javax.imageio.ImageTypeSpecifier(
                                    colorModel, colorModel.
                                            createCompatibleSampleModel(100, 100)));
                    imgWrier.reset();
                    imgWrier.setOutput(ImageIO.createImageOutputStream(out));
                    imgWrier.write(null, new IIOImage(tag, null, null),
                                   imgWriteParams);
                    out.flush();
                    in = new ByteArrayInputStream(out.toByteArray());
                    //        out.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
//                log.warn("图片压缩出现问题", e);
            }
            //上传保存压缩图片

            String url = ossService.uploadFile(path, in, compressAttName);//将附件保存到oss服务器(Url/文件/文件名)
            Attachment attr = new Attachment();
            attr.setId(id);
            attr.setAtt_name(compressAttName);
            attr.setAtt_path(url);
            attr.setMoudel_name(moudelName);
            attr.setAtt_type(attType);
            attr.setUpload_time(DateUtils.getSystemDate());
            attr.setDownload_count(0);
            attr.setGid(gid);
            attr.setIs_compress(1);
//            this.saveAttachmentDao(attr);
//            Boolean flag = this.contains(attr);
            if (attr!=null) {
                return attr;
            }else{
                 return null;
            } 

        }

           //上传文件
        public String uploadFile(String uploadPath, InputStream input, String fileName) {
            String uploadPathName = processingPath(uploadPath) + DataUtils.getUUID();
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentDisposition("attachment;filename=" + fileName);
            getOssClient().putObject(bucketName, uploadPathName, input, metadata);
            return getHttpURLByFileKey(uploadPathName);
        }

        //实例化服务端对象(oss)
          public OSSClient getOssClient() {
            if (client == null) {
                ClientConfiguration conf = new ClientConfiguration();
                conf.setConnectionTimeout(timeout);
                conf.setMaxErrorRetry(3);
                client = new OSSClient(endpoint, accessKeyId, accessKeySecret);//oss应用所需参数
            }
            return client;
        }
时间: 2024-10-12 19:18:26

图片上传阿里云(对象存储OSS)的相关文章

WPOSS – WordPress阿里云对象存储OSS插件 网站图片分离加速

我们WordPress课堂在前面有一篇文章中介绍到WPCOS插件,这是针对WordPress程序集合腾讯云COS对象存储进行网站图片分离的插件,包括我们网站目前也有在用.可以降低网站的带宽占用,提高网站的访问速度,当然这个需要我们购买对象存储和流量包,必要的成本还是需要的. 不过有些网友提到自己如果在使用阿里云服务器建站的时候,也想用到类似的插件分离网站的图片或者其他附件文件,那在这里笔者就推荐使用类似的WPOSS插件,基于阿里云对象存储OSS的.功能上有些类似WPCOS,但是稍微设置上有一些不

阿里云对象存储OSS支持版本管理特性

阿里云对象存储OSS现已经全面支持"对象版本管理"特性.该功能适用于所有的存储类型以及区域.当Bucket启用该特性后,"对象版本管理"功能可以保护和恢复误删除.误覆盖的数据. 对象存储OSS"版本管理"具有如下特点: 提供"应用级"数据保护,可防止文件意外覆盖:当Bucket开启版本管理特性后,该Bucket内对象的每次修改.删除操作,OSS都会生成对应的历史版本.授权的用户可以通过控制台.API.SDK等方式查询.下载以及

图片上传阿里云oss

1.composer加载oss插件 composer require aliyuncs/oss-sdk-php 2.更改config配置 //控制器代码如下 public function aliyun($category='',$isunlink=false,$bucket="phpchai"){ $file=$_FILES; $savePath=$file['file']['name'];//文件名称 $accessKeyId = config('aliyun_oss.access

Thumbnails 压缩图片上传阿里云服务器所遇到的问题

InputStream inputStream = null; inputStream = frontFile.getInputStream();BufferedImage bufImg = Thumbnails.of(inputStream).scale(0.2f).asBufferedImage();ByteArrayOutputStream os = new ByteArrayOutputStream();String frontFileName = frontFile.getOrigin

小程序---&gt;小程序图片上传阿里OSS使用方法

小程序图片上传阿里OSS使用方法 首先看下参考文档 ( http://blog.csdn.net/qq_38125123/article/details/73870667) 这里只将一些运用过程中遇到的问题及解决办法: 1.cryptojs,sha1js,hmacjs,base64js在哪下载及使用方法: 文件可以在阿里oss实例文档中找到. 在运用过程中如果是通过require引入的,会找不到引入的方法,原因是这些js文档没有模块导出,可以在原文件里找到其顶部全局对象,exports出来即可.

阿里云对象存储应用服务器搭建代码

背景说明 最近做一个APP客户端图片直传阿里云OSS的服务,需要在后台开一个阿里云的OSSToken获取的接口. 阿里云官方文档地址:快速搭建移动应用直传服务. 略过移动端说明,直接看服务端的. 不是移动端直传吗,为什么需要服务端呢?原因如下: Android和iOS应用不能直接存储AccessKey,这样会存在数据泄露的风险.所以应用必须向用户的应用服务器申请一个Token. 这个Token是有时效性的,如果Token的过期时间是30分钟(由应用服务器指定),那么在这30分钟里,该Androi

图片或文件上传阿里云服务

//图片上传到阿里云 [AcceptVerbs(HttpVerbs.Post)] public JsonResult Upload(HttpPostedFileBase fileData, string tupianming) { if (fileData != null) { try { // 文件上传后的保存路径 var extName = Path.GetExtension(fileData.FileName); if (string.IsNullOrWhiteSpace(extName)

WordPress安装WPCOS插件分离图片至腾讯云对象存储加速网站

我们在前面的文章中已经通过"WordPress配置腾讯云对象存储COS之存储桶创建和设置"和"腾讯云对象存储COS绑定域名/开启CDN/设置免费SSL证书"两篇文章完成对于腾讯云对象存储COS的梳理,我们已经会在腾讯云COS中创建存储桶,以及绑定自己的域名和开启CDN加速.如果我们不绑定域名也是可以用的,只不过理论上用自己的域名连接比较专业一些. 同时我们在上一篇文章中也有知道获取腾讯云API密钥,因为在这篇文章中我们会在WordPress课堂网站安装WPCOS插件

自定义镜像上传阿里云

alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻型Linux发行版,它不同于通常的Linux发行版,Alpine采用了musl libc 和 BusyBox以减少系统的体积和运行时的资源消耗. 2.Alpine Linux提供了自己的包管理工具:apk(注意:ubuntu中是apt-get),我们可以通过https://pkgs.alpinelinux.org/packages 查询包信息 3.Alpine Docker镜像继承了Alpine Lin