springboot上传文件到阿里云OSS

来源:互联网 发布:海关数据免费查询系统 编辑:程序博客网 时间:2024/05/22 07:09
  /**     * 方法描述:文件上传     *      * @author leon 2017年7月25日 上午10:54:37     * @param request     * @param response     * @return     */    @RequestMapping(value = "/upload", method = { RequestMethod.POST })    @ResponseBody    public ResultModel<List<String>> upload(HttpServletRequest request, HttpServletResponse response) {        ResultModel<List<String>> resultModel = new ResultModel<List<String>>();        try {            // 创建一个通用的多部分解析器            CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());            List<String> files = new ArrayList<>();            // 判断 request 是否有文件上传,即多部分请求            if (multipartResolver.isMultipart(request)) {                // 转换成多部分request                MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;                // 取得request中的所有文件名                Iterator<String> iter = multiRequest.getFileNames();                while (iter.hasNext()) {                    // 取得上传文件                    MultipartFile file = multiRequest.getFile(iter.next());                    if (file != null) {                        // 取得当前上传文件的文件名称                        String fileName = file.getOriginalFilename();                        // 如果名称不为空,说明该文件存在,否则说明该文件不存在                        if (fileName.trim() != "") {                            File newFile = new File(fileName);                            FileOutputStream outStream = new FileOutputStream(newFile); // 文件输出流用于将数据写入文件                            outStream.write(file.getBytes());                            outStream.close(); // 关闭文件输出流                            file.transferTo(newFile);                            // 上传到阿里云                            files.add(AliOSSUtil.upload(newFile));                            newFile.delete();                        }                    }                }            }            resultModel.setReturnValue(files);        } catch (ValidateException e) {            resultModel.setSuccessed(false);            resultModel.setErrorCode(e.getMessage());        } catch (Exception e) {            resultModel.setSuccessed(false);            resultModel.setErrorCode("system error");            log.error(e.getMessage());            e.printStackTrace();        }        return resultModel;    }


public class AliOSSUtil {    private final static Logger log               = Logger.getLogger(AliOSSUtil.class);    private static String       END_POINT         = "oss-cn-shanghai.aliyuncs.com";    private static String       ACCESS_KEY_ID     = "xxx";    private static String       ACCESS_KEY_SECRET = "xxx";    private static String       BUCKET_NAME       = "xxx-image";    // 文件访问域名    private static String       FILE_HOST         = "https://file.xxx.com/";    /**     * 方法描述:上传文件     *      * @author leon 2016年12月16日 上午11:40:34     * @param file 文件对象     * @return     */    public static String upload(File file) {        if (file == null) {            return null;        }        // 创建OSS客户端        OSSClient ossClient = new OSSClient(END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);        try {            // 判断文件容器是否存在,不存在则创建            if (!ossClient.doesBucketExist(BUCKET_NAME)) {                ossClient.createBucket(BUCKET_NAME);                CreateBucketRequest createBucketRequest = new CreateBucketRequest(BUCKET_NAME);                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);                ossClient.createBucket(createBucketRequest);            }            // 创建文件路径            String fileUrl = DateUtil.dateTo8String2(new Date()) + "/" + UuidUtil.getUuidByJdk(false);            // 上传文件            PutObjectResult result = ossClient.putObject(new PutObjectRequest(BUCKET_NAME, fileUrl, file));            if (null != result) {                return FILE_HOST + fileUrl;            }        } catch (OSSException oe) {            log.error(oe.getMessage());        } catch (ClientException ce) {            log.error(ce.getMessage());        } finally {            // 关闭OSS服务,一定要关闭            ossClient.shutdown();        }        return null;    }    /**     * 方法描述:上传文件     *      * @author leon 2016年12月26日 下午3:33:13     * @param inputStream 文件流     * @return     * @throws FileNotFoundException     */    public static String upload(InputStream inputStream) throws FileNotFoundException {        if (inputStream == null) {            return null;        }        // 创建OSS客户端        OSSClient ossClient = new OSSClient(END_POINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);        try {            // 判断文件容器是否存在,不存在则创建            if (!ossClient.doesBucketExist(BUCKET_NAME)) {                ossClient.createBucket(BUCKET_NAME);                CreateBucketRequest createBucketRequest = new CreateBucketRequest(BUCKET_NAME);                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);                ossClient.createBucket(createBucketRequest);            }            // 创建文件路径            String fileUrl = DateUtil.dateTo8String2(new Date()) + "/" + UuidUtil.getUuidByJdk(false);            // 上传文件            PutObjectResult result = ossClient.putObject(new PutObjectRequest(BUCKET_NAME, fileUrl, inputStream));            if (null != result) {                return FILE_HOST + fileUrl;            }        } catch (OSSException oe) {            log.error(oe.getMessage());        } catch (ClientException ce) {            log.error(ce.getMessage());        } finally {            // 关闭OSS服务,一定要关闭            ossClient.shutdown();        }        return null;    }}

maven依赖的jar包

<!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.4.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency>



原创粉丝点击