java中spring的maven项目往服务器上面发文件的步骤

首先配置好ssm的基本环境,可参考
https://blog.csdn.net/liqian_yu/article/details/108115480.

pom.xml 中要配置依赖

		<!--用于照片上传的七牛云服务器 -->
		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>qiniu-java-sdk</artifactId>
			<version>7.2.2</version>
		</dependency>

我们要有文件上传的ajaxfileupload.js插件,这个js插件在网上可以下载,配置好文件上传的ajax方法,以下局部代码可以参考在这里插入代码片

$.ajaxFileUpload({
			url : '${pageContext.request.contextPath}/qiniu/upload',//用于文件上传的服务器端请求地址
			secureuri : false,//一般设置为false
			fileElementId : 'file',//文件上传空间的id属性  <input type="file" id="file" name="file" />
			dataType : 'json',//返回值类型 一般设置为json
			success : function(data, status) {//服务器成功响应处理函数

				var imgObj = $("<img>");
				imgObj.attr("src", data.resultString);
				imgObj.attr("width", "30px");
				imgObj.attr("height", "30px");
				$("#imgDiv").html("");
				$("#imgDiv").append(imgObj);
				$("#image").val(data.resultString);
			},
			error : function(data, status, e) {//服务器响应失败处理函数
				alert(status);
				alert(e);
			}
		});	

我们在${pageContext.request.contextPath}/qiniu/upload下收到post请求,在控制器代码如下

package com.zzti.controller;

import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.zzti.util.QiniuCloudUtil;
import com.zzti.util.Result;

@Controller
public class QiNiuUploadController {
	
    @RequestMapping(value="qiniu/upload",method = RequestMethod.POST)
    @ResponseBody
    public Result upFile(MultipartFile file, HttpServletRequest request) {
        //获取图片上传的名称,比如car.jpg
        String orinalName = file.getOriginalFilename();
        //获取图片上传的扩展名.jpg
        String suffixName = orinalName.substring(orinalName.indexOf("."));
        Result rs = new Result();// 
        //文件为空响应为:上传图片为空
        if (file.isEmpty()) {
            rs.setCode(500);
            rs.setResultBoolean(false);
            rs.setResultMessage("上传图片为空");
            return rs;
        }

        try {
            byte[] bytes = file.getBytes();
            //使用uuid替代原来的名称,避免上传的文件同名时无法区分sdgdfg-fgdfgdf-gfhf.jpg
            String imageName = UUID.randomUUID().toString()+suffixName;
            //使用七牛工具类上传图片
            QiniuCloudUtil qiniuUtil = new QiniuCloudUtil();
            //使用base64方式上传到七牛云
            String url = qiniuUtil.put64image(bytes, imageName);//qfcc4anm8.hd-bkt.clouddn.comsdgdfg-fgdfgdf-gfhf.jpg
            url = url.split(".com")[0] + ".com/" + url.split(".com")[1];//qfcc4anm8.hd-bkt.clouddn.com/sdgdfg-fgdfgdf-gfhf.jpg
            rs.setCode(200);
            rs.setResultBoolean(true);
            rs.setResultMessage("上传图片成功");
            //上传成功返回七牛云云服务器上图片的url地址,并且将该地址保存到customer表中
            rs.setResultString("http://"+url);//http://qfcc4anm8.hd-bkt.clouddn.com/sdgdfg-fgdfgdf-gfhf.jpg
            return rs;
        } catch (Exception e) {
            rs.setResultBoolean(false);
            rs.setCode(500);
            rs.setResultMessage("上传图片异常");
            return rs;
        }

    }
    

}
*[Result]:实体类,下面会给出代码 
*[QiniuCloudUtil]:工具类,下面会给代码

Result实体类:

package com.zzti.util;

public class Result {

    private String resultMessage;
    private Integer code;
    private Boolean resultBoolean;
    private String resultString;//上传的图片url地址,保存到数据库

    public String getResultMessage() {
        return resultMessage;
    }

    public void setResultMessage(String resultMessage) {
        this.resultMessage = resultMessage;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public Boolean getResultBoolean() {
        return resultBoolean;
    }

    public void setResultBoolean(Boolean resultBoolean) {
        this.resultBoolean = resultBoolean;
    }

    public String getResultString() {
        return resultString;
    }

    public void setResultString(String resultString) {
        this.resultString = resultString;
    }
}

QiniuCloudUtil:工具类,只需要按照自己的内容修改,zone0(服务器中文件夹地区),ACCESS_KEY,String SECRET_KEY,bucketname(这是自己空间里的包名),DOMAIN(这是自己空间的外链地址),其他不需要改

package com.zzti.util;

import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.Base64;
import com.qiniu.util.StringMap;
import com.qiniu.util.UrlSafeBase64;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;

import java.io.IOException;

public class QiniuCloudUtil {

    //构造一个带指定Zone对象,这里zone0代表的是文件夹华东地区的配置类
    private static final Configuration cfg = new Configuration(Zone.zone0());
    // 设置需要操作的账号的AK和SK,如果自己注册成功后可以修改为你自己注册的AK和SK信息
    private static final String ACCESS_KEY = "AQz0zpQTe20YXxk2FMKletdRnX-BfEuGyJnhA";
    private static final String SECRET_KEY = "U9U7juqrySdnMGEtyWapi8fbsbm6AmpA9";

    // 要上传的空间,,如果自己注册成功后可以修改为你自己注册的传的空间信息,这是自己空间里的包名
    private static final String bucketname = "lingyigemingzi";

    // 密钥
    private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
	//这是自己空间的外链地址
    private static final String DOMAIN = "qfcdddovx.hd-bkt.clouddn.com";

    private static final String style = "";

    public String getUpToken() {
        return auth.uploadToken(bucketname, null, 3600, new StringMap().put("insertOnly", 1));
    }
    // 普通上传
    public String upload(String filePath, String fileName) throws IOException {

        // 创建上传对象
        UploadManager uploadManager = new UploadManager(cfg);
        try {
            // 调用put方法上传
            String token = auth.uploadToken(bucketname);
            /*
            if(UtilValidate.isEmpty(token)) {
                System.out.println("未获取到token,请重试!");
                return null;
            }
            */
            Response res = uploadManager.put(filePath, fileName, token);
            // 打印返回的信息
            System.out.println(res.bodyString());
            if (res.isOK()) {
                Ret ret = res.jsonToObject(Ret.class);
                //如果不需要对图片进行样式处理,则使用以下方式即可
                //return DOMAIN + ret.key;
                return DOMAIN + ret.key + "?" + style;
            }
        } catch (QiniuException e) {
            Response r = e.response;
            // 请求失败时打印的异常的信息
            System.out.println(r.toString());
            try {
                // 响应的文本信息
                System.out.println(r.bodyString());
            } catch (QiniuException e1) {
                // ignore
            }
        }
        return null;
    }
    //base64方式上传
    public String put64image(byte[] base64, String key) throws Exception{
        String file64 = Base64.encodeToString(base64, 0);
        Integer l = base64.length;
        String url = "http://upload.qiniu.com/putb64/" + l + "/key/"+ UrlSafeBase64.encodeToString(key);
        //非华东空间需要根据注意事项 1 修改上传域名
        RequestBody rb = RequestBody.create(null, file64);
        Request request = new Request.Builder().
                url(url).
                addHeader("Content-Type", "application/octet-stream")
                .addHeader("Authorization", "UpToken " + getUpToken())
                .post(rb).build();
        //System.out.println(request.headers());
        OkHttpClient client = new OkHttpClient();
        okhttp3.Response response = client.newCall(request).execute();
        System.out.println(response);
        //如果不需要添加图片样式,使用以下方式
        return DOMAIN + key;
        //return DOMAIN + key + "?" + style;
    }
    class Ret {
        public long fsize;
        public String key;
        public String hash;
        public int width;
        public int height;
    }
}

最后存储的路径和文件名字就是实体类中resultString的值!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值