java上传文件到oss(阿里云)

做这个功能之前我们需要导入阿里云OSS官方提供的工具包

aliyun-sdk-oss-2.5.0.jar 这个文件 如果有最新版的话就下载最新版

 

aliyun.upload.AliyunConfig

 

package aliyun.upload;

 

public final class AliyunConfig

{

    //你的oss所在域,要加http://   不明白可以对照你的文件引用地址

    public static Stringendpoint = "http://oss-cn-shenzhen.aliyuncs.com";

 

    //密匙keyId 可以在阿里云获取到

    public static StringaccessKeyId = "xxxxxxx";

 

    //密匙keySecret 可以在阿里云获取到

    public static StringaccessKeySecret = "";

 

    //你的bucketName 名称   即是你的OSS对象名称  不明白查oss开发文档专业术语

    public static StringbucketName = "";

}

aliyun.upload.IAliyunUpload

 

package aliyun.upload;

 

public interface IAliyunUpload

{

    /**

     * @param

     * StringfilePathName 本地图片路径(D:/xxxx/xxxx....../xx/xx.jgp|xx.png|..)

     * StringsavePathName 将要保存到OSS上的路径地址

     * */

    public StringuploadFile(String filePathName,String savePathName);

}

 

 

aliyun.upload.AliyunUploadVersion1

 

package aliyun.upload;

 

import java.io.File;

import java.io.IOException;

 

import com.aliyun.oss.ClientException;

import com.aliyun.oss.OSSClient;

import com.aliyun.oss.OSSException;

importcom.aliyun.oss.model.CompleteMultipartUploadResult;

importcom.aliyun.oss.model.UploadFileRequest;

importcom.aliyun.oss.model.UploadFileResult;

 

import Log.Log;

 

/**

 * 阿里云文件上传 - 简易版

 * */

public class AliyunUploadVersion1implements IAliyunUpload

{

 

    /**

     * 断点续传

     * */

    @Override

    public StringuploadFile(String uploadFile,String savePathName)

    {

       OSSClient ossClient = new OSSClient(AliyunConfig.endpoint,AliyunConfig.accessKeyId, AliyunConfig.accessKeySecret);

 

       try {

           UploadFileRequest uploadFileRequest = newUploadFileRequest(AliyunConfig.bucketName,savePathName);

           // 待上传的本地文件

           uploadFileRequest.setUploadFile(uploadFile);

 

           // 设置并发下载数,默认1

           uploadFileRequest.setTaskNum(5);

           // 设置分片大小,默认100KB

           uploadFileRequest.setPartSize(1024 * 1024 * 1);

           // 开启断点续传,默认关闭

           uploadFileRequest.setEnableCheckpoint(true);

 

           UploadFileResult uploadResult = ossClient.uploadFile(uploadFileRequest);

 

           CompleteMultipartUploadResult multipartUploadResult =

                   uploadResult.getMultipartUploadResult();

           return multipartUploadResult.getLocation();

       } catch (OSSException oe) {

 

           Log.e("*************************************************OSS upload fileerror  create_date " + tool.Tool.getDate() + "*************************************");

 

           Log.e("Caught an OSSException, which means your request made it to OSS,"

                   + "but was rejected with an error response for some reason.");

           Log.e("Error Message: " + oe.getErrorCode());

           Log.e("Error Code:       " +oe.getErrorCode());

           Log.e("Request ID:      " +oe.getRequestId());

           Log.e("HostID:           " +oe.getHostId());

           Log.e("*************************************************OSS upload fileerror*************************************");

       } catch (ClientException ce) {

           Log.e("Caught an ClientException, which means the client encountered"

                   + "a serious internal problem while trying to communicate with OSS, "

                   + "such as not being able to access the network.");

           Log.e("Error Message: " + ce.getMessage());

       } catch (Throwable e) {

           e.printStackTrace();

       } finally {

           ossClient.shutdown();

       }

 

       return null;

    }

}

文件上传容器

 

package aliyun.upload;

 

importorg.springframework.stereotype.Repository;

 

@Repository("aliyun_upload")

public class AliyunUpload extendsAliyunUploadVersion1

{

 

    /**

     * 上传文件

     * */

    @Override

    public StringuploadFile(String filePath,String savePathName)

    {

       return super.uploadFile(filePath,savePathName);

    }

 

}  

spring.beans.service.UploadService 文件上传服务

 

package spring.beans.service;

 

import java.io.File;

import java.io.IOException;

import java.util.Date;

 

importjavax.servlet.http.HttpServletRequest;

 

importorg.springframework.stereotype.Service;

importorg.springframework.web.multipart.MultipartFile;

 

import aliyun.upload.AliyunUpload;

import tool.RandomNumStr;

import tool.Tool;

 

@Service(value="upload_service")

public class UploadService

{

    //默认 本地存储路径

    private final Stringsave_local_path = "D:/java_class/Company/WebRoot/";

 

    //默认  文件保存路径

    private Stringsave_context_path = "Upload/images/";

 

    public voidsetSavePath(String savePath)

    {

       this.save_context_path = savePath;

    }

 

    /**

     * 阿里云文件上传

     * @param

     * MultipartFilefile 文件流

     * @return

     * String 文件引用路径 如 String filePath ="http://aliyun.xxxx.xxxx/xxxx/xxxx/xxxx.jpg"

     * */

    public StringaliyunUploadFile(MultipartFile file)

    {

       //获取文件名称

       String fileName = file.getOriginalFilename();

 

       //生成存储路径

       String save_handler_path = save_local_path + save_context_path;

 

       //获得文件后缀

       String prefix=fileName.substring(fileName.lastIndexOf("."));

 

       //存储目录

       File parentDir = new File(save_handler_path);

 

       //存储目录是否存在

       if(!parentDir.exists())

       {

           parentDir.mkdirs();

       }

 

       //生成文件存储名称

       String fileSaveName = RandomNumStr.createRandomString(7) + String.valueOf(newDate().getTime()) + prefix;

 

       try{

           File saveFile = new File(save_handler_path,fileSaveName);

           //移动临时文件

           file.transferTo(saveFile);

 

           //新增阿里云文件上传

           AliyunUpload aliyunUpload = new AliyunUpload();

 

           String fileUrl = aliyunUpload.uploadFile(save_handler_path+fileSaveName,save_context_path+fileSaveName);

 

           saveFile.delete();

 

           return fileUrl;

       }catch(IOException e)

       {

           return null;

       }

    }

 

    /**

     * 文件存储

     * @param

     * MyltipartFilefile 文件资源

     * @return

     * 文件文件存储地址

     * */

    public StringlocalUploadFile(MultipartFile file,HttpServletRequest request)

    {

       //获取文件名称

       String fileName = file.getOriginalFilename();

 

       //生成存储路径

        Stringsave_handler_path = save_local_path + save_context_path;

 

       //获得文件后缀

       String prefix=fileName.substring(fileName.lastIndexOf("."));

 

       //存储目录

       File parentDir = new File(save_handler_path);

 

       //存储目录是否存在

       if(!parentDir.exists())

       {

           parentDir.mkdirs();

       }

 

       //生成文件存储名称

       String fileSaveName = RandomNumStr.createRandomString(7) + String.valueOf(newDate().getTime()) + prefix;

 

       try{

           //移动临时文件

           file.transferTo(new File(save_handler_path,fileSaveName));

 

           //文件地址

           return Tool.getDomain(request) + save_context_path + fileSaveName;

       }catch(IOException e)

       {

           return null;

       }

    }

}

 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容