java实现文件上传到七牛服务器

1、基于七牛云存储服务构建的应用,

基本架构

这里写图片描述


2、引入七牛jar包

 <!--七牛云存储-->
        <dependency>
            <groupId>com.qiniu</groupId>
            <artifactId>sdk</artifactId>
            <version>6.1.0</version>
        </dependency>

3、代码:

import com.qiniu.api.auth.AuthException;
import com.qiniu.api.auth.digest.Mac;
import com.qiniu.api.config.Config;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.qiniu.api.rs.GetPolicy;
import com.qiniu.api.rs.PutPolicy;
import com.qiniu.api.rs.RSClient;
import com.qiniu.api.rs.URLUtils;
import org.json.JSONException;

import java.io.ByteArrayInputStream;
import java.io.File;

/**
 * Created by shadow on 2015/11/28.
 *
 */
public class QiniuServiceImpl {

    private String bucketName;
    private String domain;

    public void setDomain(String domain) {

        this.domain = domain;
    }

    public void setBucketName(String bucketName) {
        this.bucketName = bucketName;
    }
    //设置AccessKey
    public void setAccessKey(String key) {
        Config.ACCESS_KEY = key;
    }
    //设置SecretKey
    public void setSecretKey(String key) {
        Config.SECRET_KEY = key;
    }

    //通过文件路径上传文件
    public boolean uploadFile(String localFile) throws AuthException, JSONException {
        File file = new File(localFile);
        return uploadFile(file);
    }

    //通过File上传
    public boolean uploadFile(File file) throws AuthException, JSONException {
        String uptoken = getUpToken();

        // 可选的上传选项,具体说明请参见使用手册。
        PutExtra extra = new PutExtra();

        // 上传文件
        PutRet ret = IoApi.putFile(uptoken, file.getName(), file.getAbsolutePath(), extra);

        if (ret.ok()) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 从 inputstream 中写入七牛
     * @param key 文件名
     * @param content 要写入的内容
     * @return
     * @throws AuthException
     * @throws JSONException
     */
    public boolean uploadFile(String key, String content) throws AuthException, JSONException {
        // 读取的时候按的二进制,所以这里要同一
        ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes());

        String uptoken = getUpToken();

        // 可选的上传选项,具体说明请参见使用手册。
        PutExtra extra = new PutExtra();

        // 上传文件
        PutRet ret = IoApi.Put(uptoken, key, inputStream, extra);

        if (ret.ok()) {
            return true;
        } else {
            return false;
        }
    }

    //获得下载地址
    public String getDownloadFileUrl(String filename) throws Exception {
        Mac mac = getMac();
        String baseUrl = URLUtils.makeBaseUrl(domain, filename);
        GetPolicy getPolicy = new GetPolicy();
        String downloadUrl = getPolicy.makeRequest(baseUrl, mac);
        return downloadUrl;
    }

    //删除文件
    public void deleteFile(String filename) {
        Mac mac = getMac();
        RSClient client = new RSClient(mac);
        client.delete(domain, filename);
    }

    //获取凭证
    private String getUpToken() throws AuthException, JSONException {
        Mac mac = getMac();
        PutPolicy putPolicy = new PutPolicy(bucketName);
        String uptoken = putPolicy.token(mac);
        return uptoken;
    }

    private Mac getMac() {
        Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
        return mac;
    }

}

4、测试

import com.qiniu.api.auth.AuthException;
import org.json.JSONException;
import org.junit.Before;
import org.junit.Test;

import java.io.File;


/**
 * Created by shadow on 2015/11/29.
 */
public class QiniuTest {
    private QiniuServiceImpl qiniuService = null;

    @Test
    @Before
    public void init() {
        qiniuService = new QiniuServiceImpl();
        //设置AccessKey
        qiniuService.setAccessKey("***********");
        //设置SecretKey
        qiniuService.setSecretKey("***********");
        //设置存储空间
        qiniuService.setBucketName("**********");
        //设置七牛域名
        qiniuService.setDomain("***********");
    }

    @Test
    public void testUpload() throws AuthException, JSONException {
        File file = new File("C:/shadow.jpg");
        qiniuService.uploadFile(file);
    }

    @Test
    public void testDownloadFileUrl() throws Exception {
        String filePath = qiniuService.getDownloadFileUrl("shadow.jpg");
        System.out.println("file path == " + filePath);
    }
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用Java中的Apache Commons FileUpload来实现本地文件上传到文件服务器。以下是一个简单的示例代码: ```java import java.io.File; import java.io.IOException; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 定义上传文件的存放路径 String filePath = "D:/files/"; // 检查请求是否为multipart/form-data类型 if (ServletFileUpload.isMultipartContent(request)) { // 创建一个DiskFileItemFactory对象,用于处理文件上传路径或者大小限制等 DiskFileItemFactory factory = new DiskFileItemFactory(); // 创建一个ServletFileUpload对象,用于解析上传的文件 ServletFileUpload upload = new ServletFileUpload(factory); try { // 解析上传的文件 List<FileItem> items = upload.parseRequest(request); // 遍历解析出来的文件集合 for (FileItem item : items) { // 如果当前项为普通表单属性 if (item.isFormField()) { String name = item.getFieldName(); String value = item.getString(); System.out.println(name + "=" + value); } else { // 如果当前项为文件 String fileName = item.getName(); // 去掉路径,只取文件名 fileName = FilenameUtils.getName(fileName); String filePathName = filePath + fileName; File uploadedFile = new File(filePathName); // 将文件保存到服务器指定路径 item.write(uploadedFile); } } } catch (Exception e) { e.printStackTrace(); } } } } ``` 在这个示例中,我们使用了Apache Commons FileUpload来解析上传的文件,并将文件保存到服务器指定的路径上。你需要将文件服务器的路径设置为`filePath`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值