七牛云的文件上传和下载

1、本篇博客参考网址

https://www.cnblogs.com/xiaoBlog2016/p/9041308.html

https://blog.csdn.net/peaceful000/article/details/53171578

https://blog.csdn.net/albertfly/article/details/51499812

2、在pom.xml中添加需要的jar

<!--七牛云上传图片服务-->
 <!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk -->
    <dependency>
      <groupId>com.qiniu</groupId>
      <artifactId>qiniu-java-sdk</artifactId>
      <version>7.0.8</version>
    </dependency>

3、详细代码

package com.qiniu.upload;

import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.ResponseBody;

import java.io.*;

public class QiniuUtil {

  //设置好账号的ACCESS_KEY和SECRET_KEY
  String ACCESS_KEY = ""; //这两个登录七牛 账号里面可以找到
  String SECRET_KEY = "";

  //要上传的空间
  String bucketname = ""; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置私有)
  //上传到七牛后保存的文件名

  //密钥配置
  Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
  //创建上传对象
  UploadManager uploadManager = new UploadManager();

  /**
   * 简单上传,使用默认策略,只需要设置上传的空间名就可以了
   *
   * @param fileName 文件上传至七牛云空间的名称
   * @return
   */
  public String getUpToken(String fileName) {
    //return auth.uploadToken(bucketname);
    //<bucket>:<key>,表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”,已存在同名资源则会被本次覆盖。
    //如果希望只能上传指定key的文件,并且不允许修改,那么可以将下面的 insertOnly 属性值设为 1。
    //第三个参数是token的过期时间
    return auth.uploadToken(bucketname, fileName, 3600, new StringMap().put("insertOnly", 0));
  }

  /**
   * 普通上传
   *
   * @param filePath 文件路径
   * @param fileName 文件上传至七牛云空间的名称
   * @throws IOException
   */
  public void upload(String filePath, String fileName) {
    try {
      //调用put方法上传
      Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
      //打印返回的信息
      System.out.println(res.bodyString());
    } catch (QiniuException e) {
      Response r = e.response;
      // 请求失败时打印的异常的信息
      System.out.println(r.toString());
      try {
        //响应的文本信息
        System.out.println(r.bodyString());
      } catch (QiniuException e1) {
        //ignore
        e.printStackTrace();
      }
    }
  }

  /**
   * 获取下载文件路径,即:donwloadUrl
   *
   * @return
   */
  public String getDownloadUrl(String targetUrl) {
    String downloadUrl = auth.privateDownloadUrl(targetUrl);
    return downloadUrl;
  }

  /**
   * 文件下载
   *
   * @param targetUrl
   */
  public void download(String targetUrl) {
    //获取downloadUrl
    String downloadUrl = getDownloadUrl(targetUrl);
    //本地保存路径
    String filePath = "E:\\chen\\";
    download(downloadUrl, filePath);
  }

  /**
   * 通过发送http get 请求获取文件资源
   *
   * @param url
   * @param filepath
   * @return
   */
  private static void download(String url, String filepath) {
    OkHttpClient client = new OkHttpClient();
    System.out.println(url);
    Request req = new Request.Builder().url(url).build();
    com.squareup.okhttp.Response resp = null;
    try {
      resp = client.newCall(req).execute();
      System.out.println(resp.isSuccessful());
      if (resp.isSuccessful()) {
        ResponseBody body = resp.body();
        InputStream is = body.byteStream();
        byte[] data = readInputStream(is);
        //判断文件夹是否存在,不存在则创建
        File file = new File(filepath);
        if (!file.exists() && !file.isDirectory()) {
          System.out.println("===文件夹不存在===创建====");
          file.mkdir();
        }
        File imgFile = new File(filepath + "888.jpg");
        FileOutputStream fops = new FileOutputStream(imgFile);
        fops.write(data);
        fops.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
      System.out.println("Unexpected code " + resp);
    }
  }

  /**
   * 读取字节输入流内容
   *
   * @param is
   * @return
   */
  private static byte[] readInputStream(InputStream is) {
    ByteArrayOutputStream writer = new ByteArrayOutputStream();
    byte[] buff = new byte[1024 * 2];
    int len = 0;
    try {
      while ((len = is.read(buff)) != -1) {
        writer.write(buff, 0, len);
      }
      is.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return writer.toByteArray();
  }

  public static void main(String args[]) throws IOException {
    String fileName = "xiao.jpg";
    //上传文件的路径
    String FilePath = "C:\\Users\\ChenXiao\\Pictures\\Saved Pictures\\xiao.jpg";  //本地要上传文件路径
    // new QiniuUtil().upload(FilePath,fileName);

    //构造私有空间的需要生成的下载的链接;
    //格式: http://私有空间绑定的域名/空间下的文件名
    String targetUrl = "http://私有空间绑定的域名/下载文件名称.后缀"
    new QiniuUtil().download(targetUrl);
  }

}

4、至此,七牛云进行文件的存储和下载已然完成,在上述代码和图片中若是存在问题,请指出,谢谢!!!

原文地址:https://www.cnblogs.com/fswhq/p/11757869.html

时间: 2024-10-09 18:14:27

七牛云的文件上传和下载的相关文章

Struts2入门(七)——Struts2的文件上传和下载

一.前言 在之前的随笔之中,我们已经了解Java通过上传组件来实现上传和下载,这次我们来了解Struts2的上传和下载. 注意:文件上传时,我们需要将表单提交方式设置为"POST"方式,并且将enctype属性设置为"multipart/form-data",该属性的默认值为"application/x-www-form-urlencoded",就是说,表单要写成以下这种形式: <form action="" metho

java实现文件上传和下载

写在前面 [文件上传和下载]是很多系统必备功能, 比如PM\OA\ERP等:系统中常见的开发模式有B/S和C/S,而前者主要是通过浏览器来访问web服务器,一般采用七层协议中的[应用层http]进行数据传输,后者主要通过编程语言开发的app作为客户端来访问服务端,一般采用七层协议中的[传输层tcp]进行数据传输. 文章主要完成简单java web涉及的文件上传和下载功能. 正文 1. java原生servlet实现: pom.xml配置: <dependency> <groupId>

JavaWeb学习总结(五十)——文件上传和下载

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

深入分析JavaWeb Item40 -- 文件上传和下载

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

文件上传与下载!

1.上传: 1.上传数据的类型:字符,字节 1.文本类型(字符):通过url网址的?:通过表单元素:AJAX. 2.文件类型(字节):通过表单元素(file). 2.上传文件的方式: 1.form表单实现文件上传:常用方式(上传文件用post,不用get,因为get方式对于上传量有限) 通过鼠标单击,在File标签中选择的文件,才能上传. 2.通过AJAX实现文件上传:禁用方式   AJAX的数据传递通过javascript脚本取值.如果传递文件,那么也需要通过javascript脚本获取文件内

springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来: FileUpAndDown.jsp <%@ page language="java" contentType="text/html; charset=UTF-8"%> <html> <head> <title>using commons Uplo

struts2中的文件上传和下载

天下大事,必做于细.天下难事,必作于易. 曾经见过某些人,基础的知识还不扎实就去学习更难的事,这样必然在学习新的知识会很迷惑结果 再回来重新学习一下没有搞懂的知识,这必然会导致学习效率的下降!我写的这篇上传和下载都很基础. 十分适合初学者! jsp:页面 <!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时二进制文件可能会很大,还有就是enctype属性,这个属性一定要写成multipart/form-data, 不然就会以二进制文本上传到服务器端--> <for

JavaWeb文件上传和下载

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

Linux 指令篇:文件上传和下载 lrzsz

[ "lrzsz"一般用于SecureCRT ssh中使用 ] 简介:rz,sz是早期Linux/Unix同Windows进行ZModem文件传输的命令行工具.rz ,sz 是非常古老的zmodem协议使用的上传下载命令,早就被抛弃了的东西,目前的发行版基本都不再预装. 优点:比ftp命令方便,而且服务器不用打开FTP服务. 命令sz:将选定的文件发送(send)到本地机器 命令rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到Linux服务器. lrzsz安装方法: [[e