java实现上传文件到oss(阿里云)功能示例

本文实例讲述了java实现上传文件到oss(阿里云)功能。分享给大家供大家参考,具体如下:

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

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

aliyun.upload.AliyunConfig
package aliyun.upload;
public final class AliyunConfig
{
  //你的oss所在域,要加http://  不明白可以对照你的文件引用地址
  public static String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
  //密匙keyId 可以在阿里云获取到
  public static String accessKeyId = "xxxxxxx";
  //密匙keySecret 可以在阿里云获取到
  public static String accessKeySecret = "";
  //你的bucketName 名称  即是你的OSS对象名称 不明白查oss开发文档专业术语
  public static String bucketName = "";
}
aliyun.upload.IAliyunUpload
package aliyun.upload;
public interface IAliyunUpload
{
  /**
   * @param
   * String filePathName 本地图片路径(D:/xxxx/xxxx....../xx/xx.jgp|xx.png|..)
   * String savePathName 将要保存到OSS上的路径地址
   * */
  public String uploadFile(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;
import com.aliyun.oss.model.CompleteMultipartUploadResult;
import com.aliyun.oss.model.UploadFileRequest;
import com.aliyun.oss.model.UploadFileResult;
import Log.Log;
/**
 * 阿里云文件上传 - 简易版
 * */
public class AliyunUploadVersion1 implements IAliyunUpload
{
  /**
   * 断点续传
   * */
  @Override
  public String uploadFile(String uploadFile,String savePathName)
  {
    OSSClient ossClient = new OSSClient(AliyunConfig.endpoint, AliyunConfig.accessKeyId, AliyunConfig.accessKeySecret);
    try {
      UploadFileRequest uploadFileRequest = new UploadFileRequest(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 file error 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("Host ID:      " + oe.getHostId());
      Log.e("*************************************************OSS upload file error*************************************");
    } 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;
import org.springframework.stereotype.Repository;
@Repository("aliyun_upload")
public class AliyunUpload extends AliyunUploadVersion1
{
  /**
   * 上传文件
   * */
  @Override
  public String uploadFile(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;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import aliyun.upload.AliyunUpload;
import tool.RandomNumStr;
import tool.Tool;
@Service(value="upload_service")
public class UploadService
{
  //默认 本地存储路径
  private final String save_local_path = "D:/java_class/Company/WebRoot/";
  //默认 文件保存路径
  private String save_context_path = "Upload/images/";
  public void setSavePath(String savePath)
  {
    this.save_context_path = savePath;
  }
  /**
   * 阿里云文件上传
   * @param
   * MultipartFile file 文件流
   * @return
   * String 文件引用路径 如 String filePath = "http://aliyun.xxxx.xxxx/xxxx/xxxx/xxxx.jpg"
   * */
  public String aliyunUploadFile(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(new Date().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
   * MyltipartFile file 文件资源
   * @return
   * 文件文件存储地址
   * */
  public String localUploadFile(MultipartFile file,HttpServletRequest request)
  {
    //获取文件名称
    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(new Date().getTime()) + prefix;
    try{
      //移动临时文件
      file.transferTo(new File(save_handler_path,fileSaveName));
      //文件地址
      return Tool.getDomain(request) + save_context_path + fileSaveName;
    }catch(IOException e)
    {
      return null;
    }
  }
}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • JAVA技术实现上传下载文件到FTP服务器(完整)

    具体详细介绍请看下文: 在使用文件进行交互数据的应用来说,使用FTP服务器是一个很好的选择.本文使用Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服务器实现FTP服务器上文件的上传/下载/删除等操作. 关于FileZilla Server服务器的详细搭建配置过程,详情请见 FileZilla Server安装配置教程 .之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲

  • java中struts2实现文件上传下载功能实例解析

    本文实例讲述了java中struts2实现文件上传下载功能实现方法.分享给大家供大家参考.具体分析如下: 1.文件上传 首先是jsp页面的代码 在jsp页面中定义一个上传标签 复制代码 代码如下: <tr>      <td align="right" bgcolor="#F5F8F9"><b>附件:</b></td>      <td bgcolor="#FFFFFF">

  • Java实现上传文件图片到指定服务器目录

    具体代码如下所示: ***web.xml*** <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xm

  • JAVA中使用FTPClient实现文件上传下载实例代码

    在java程序开发中,ftp用的比较多,经常打交道,比如说向FTP服务器上传文件.下载文件,本文给大家介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件. 一.上传文件 原理就不介绍了,大家直接看代码吧 /** * Description: 向FTP服务器上传文件 * @Version1.0 Jul 27, 2008 4:31:09 PM by 崔红保(cuihongbao@d-heaven.com)创建 * @param url F

  • Java Spring MVC 上传下载文件配置及controller方法详解

    下载: 1.在spring-mvc中配置(用于100M以下的文件下载) <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"> <property name="messageConverters"> <list> <!--配置下载返回类型--> <bean class="or

  • JavaWeb实现文件上传下载功能实例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

  • Java通过FTP服务器上传下载文件的方法

    对于使用文件进行交换数据的应用来说,使用FTP 服务器是一个很不错的解决方案. 关于FileZilla Server服务器的详细搭建配置过程,详情请见FileZilla Server安装配置教程.之前有朋友说,上传大文件(几百M以上的文件)到FTP服务器时会重现无法重命名的问题,但本人亲测上传2G的文件到FileZilla Server都没有该问题,朋友们可以放心使用该代码. FavFTPUtil.Java package com.favccxx.favsoft.util; import jav

  • javaWeb项目部署到阿里云服务器步骤详解

    记录web项目部署到阿里云服务器步骤 (使用 web项目.阿里云服务器.Xftp.Xshell),敬请参考和指正 1.将要部署的项目打包成WAR文件格式,可以在MyEclipse.Eclipse都可以完成打包,如下图: 2.安装Xshell和Xftp两种软件 简单介绍下这两种软件作用(详情请百度相关文档) Xshell:通过网络连接到远程服务器主机. Xftp:能在Linux.Unix和Windows之间互传文件. 3.通过Xshell连接远程主机,如下图    4.创建会话完成,点击连接,显示

  • JAVA演示阿里云图像识别API,印刷文字识别-营业执照识别

    最近有由于需要,我开始接触阿里云的云市场的印刷文字识别-营业执照识别这里我加上了官网的申请说明,只要你有阿里云账号就可以用,前500次是免费的,API说明很简陋,只能做个简单参考. 一.API介绍 JAVA示例: public static void main(String[] args) { String host = "https://dm-58.data.aliyun.com"; String path = "/rest/160601/ocr/ocr_business_

  • Java中使用WebUploader插件上传大文件单文件和多文件的方法小结

    一.使用webuploader插件的原因说明 被现在做的项目坑了. 先说一下我的项目架构spring+struts2+mybatis+MySQL 然后呢.之前说好的按照2G上传就可以了,于是乎,用了ajaxFileUpload插件,因为之前用图片上传也是用这个,所以上传附件的时候就直接拿来用了 各种码代码,测试也测过了,2G文件上传没问题,坑来了,项目上线后,客户又要求上传4G文件,甚至还有20G以上的..纳尼,你不早说哦... 在IE11下用ajaxFileUpload.js插件上传超过4G的

  • 浅谈使用java实现阿里云消息队列简单封装

    一.前言 最近公司有使用阿里云消息队列的需求,为了更加方便使用,本人用了几天时间将消息队列封装成api调用方式以方便内部系统的调用,现在已经完成,特此记录其中过程和使用到的相关技术,与君共勉. 现在阿里云提供了两种消息服务:mns服务和ons服务,其中我认为mns是简化版的ons,而且mns的消息消费需要自定义轮询策略的,相比之下,ons的发布与订阅模式功能更加强大(比如相对于mns,ons提供了消息追踪.日志.监控等功能),其api使用起来更加方便,而且听闻阿里内部以后不再对mns进行新的开发

  • java web图片上传和文件上传实例

    图片上传和文件上传本质上是一样的,图片本身也是文件.文件上传就是将图片上传到服务器,方式虽然有很多,但底层的实现都是文件的读写操作. 注意事项 1.form表单一定要写属性enctype="multipart/form-data" 2.为了能保证文件能上传成功file控件的name属性值要和你提交的控制层变量名一致, 例如空间名是file那么你要在后台这样定义 private File file; //file控件名 private String fileContentType;//图

随机推荐