美文网首页
java阿里云上传图片

java阿里云上传图片

作者: IT小池 | 来源:发表于2019-12-18 20:31 被阅读0次

首先导入jar包,官方文档

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

然后创建一个类 UploadController

package cn.qingcheng.controller.file;

import cn.qingcheng.entity.Response;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@RequestMapping("/upload")
public class UploadController {
    // 访问的域名
    private final String host = "oss-cn-shenzhen.aliyuncs.com";
    // 存储空间
    private final String bucketName = "xiaochi-img";

    /*============================== 阿里云上传 =============================*/
    /**
     * 阿里云存儲上传
     * @param file
     * @param folder 类型 如:商品、品牌
     * @return
     */
    @PostMapping("/oss")
    public Response ossUpload(@RequestParam("file") MultipartFile file,String folder){
        // 创建OSSClient实例。
        OSS ossClient = createOssClient();
        // 上传文件流。
        // 保存路径,注意:这里不要以 / 或 \ 开头
        String Path = "qingcheng/"+ folder + "/" + new SimpleDateFormat("yyyy/MM").format(new Date()).toString();
        String originalFilename = file.getOriginalFilename();
        String fileName = Path + "/" + UUID.randomUUID().toString().replace("-","") + originalFilename.substring(originalFilename.lastIndexOf("."));
        try {
            ossClient.putObject(bucketName, fileName, file.getInputStream());
        } catch (IOException e) {
            // e.printStackTrace();
            return Response.error("上传失败:"+e.getMessage());
        }
        // 关闭OSSClient。
        ossClient.shutdown();
        Map map = new HashMap();
        map.put("url","https://" + bucketName + "." + host + "/" +fileName);
        return Response.success("上传成功",map);
    }

    /**
     * 删除阿里云图片(单个文件)
     * @param filePath 路径从根目录开始 :"qingcheng/brand/2019/12/c7f2d8fbda5a45d8a6a48e74df0797c7.png
     * @return
     */
    @GetMapping("/delete")
    public Response delete(String filePath){
        // 创建OSSClient实例。
        OSS ossClient = createOssClient();
        // 保存路径,注意:这里不要以 / 或 \ 开头
        // 路径从根目录开始 :"qingcheng/brand/2019/12/c7f2d8fbda5a45d8a6a48e74df0797c7.png
        // 删除文件。如需删除文件夹,请将ObjectName设置为对应的文件夹名称。如果文件夹非空,则需要将文件夹下的所有object删除后才能删除该文件夹。
        ossClient.deleteObject(bucketName, filePath);
        // 关闭OSSClient。
        ossClient.shutdown();
        return Response.success("删除成功");
    }

    /**
     * 获取 ossClient
     * @return
     */
    private OSS createOssClient(){
        // Endpoint以杭州为例,其它Region请按实际情况填写。
        String endpoint = "http://" + host;
        // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建。
        String accessKeyId = "LTAI4Fh7azVyfYdzkkLZwSVU";
        String accessKeySecret = "m6iAuji31RjAUgKgDSWRxuCRUFTHIY";
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        return ossClient;
    }

    /*============================== 本地上传 =============================*/
    /**
     * 上传本地图片
     * @param multipartFile
     * @param request
     * @return
     */
    @PostMapping("/native")
    public Response nativeUpload(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request){
        //String path = request.getSession().getServletContext().getRealPath("/img");
        String path = "D:\\web\\xampp\\htdocs\\images";
        String originalFilename = multipartFile.getOriginalFilename();
        String subPath = "/upload/" + new SimpleDateFormat("yyyy/MM").format(new Date()).toString();
        String fileName = path + "/" + subPath + "/" + UUID.randomUUID().toString().replace("-","") + originalFilename.substring(originalFilename.lastIndexOf("."));
        File file = new File(fileName);
        if (!file.getParentFile().exists()){
            file.setWritable(true);
            file.getParentFile.mkdirs();
        }
        try {
            multipartFile.transferTo(file);
        } catch (IOException e) {
            // e.printStackTrace();
            return Response.error("上传失败:"+e.getMessage());
        }
        Map map = new HashMap();
        map.put("url","http://images.com:8080" + subPath + "/" + file.getName());
        return Response.success("上传成功",map);
    }
    /**
     * 删除本地图片
     * @param filePath 文件路径
     * @return
     */
    public static boolean delete(String filePath){
        File file = new File(filePath);
        if (file.isFile()){
            System.gc(); // 强制删除
            return file.delete();
        }
        return false;
    }
}

如此就可以了。

相关文章

  • 图片上传

    图片上传 获取阿里云接口 图片上传到阿里云 图片预览接口post http://113.108.139.178:1...

  • java阿里云上传图片

    首先导入jar包,官方文档 然后创建一个类 UploadController: 如此就可以了。

  • 移动端实现图片压缩上传

    上传图片有很多框架,或者是阿里云直传,关于阿里云直传可以看我之前的博客上传图片到阿里云,这次是通过后台进行操作上传...

  • 阿里云上传图片

    + (void)uploadImages:(NSArray *)images isAsync:(BOOL)isAs...

  • 阿里云上传图片

    引言 为了更好的掌握 OSS 存储,可以先去了解一下这些基本概念[https://help.aliyun.com/...

  • 封装直传阿里云存储文件上传控件

    本文目标 封装一个直传阿里云OSS云存储图片上传控件 控件效果图 上传之前 上传成功 预览图片 文件上传前后台及阿...

  • Android OSS上传图片到阿里云

    Android OSS上传图片到阿里云 我所采取的上传方式为异步上传,如果需要多张图片的话,可以直接循环上传就可...

  • 阿里云(I)

    参考资料:iOS 阿里云服务器图片上传iOS录制(或选择)视频,压缩、上传(整理)视频 拍摄 与压缩 阿里云OSS...

  • vue多图上传到阿里云

    结合这两篇文章小程序选择图片、预览,上传到阿里云和阿里云上传图片 引入js 做循环判断上传成功后再上传下一张图 循...

  • react.js 前端实现阿里云上传

    前端实现阿里云上传图片: 1,下载阿里云相关插件 npm install ali-oss --save引用方式 :...

网友评论

      本文标题:java阿里云上传图片

      本文链接:https://www.haomeiwen.com/subject/nnxpnctx.html