前端
shangchuantupian(){
let vm=this;
uni.chooseImage({
count: 1, //默认9
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
success: function (res) {
console.log(res.tempFilePaths[0])
uni.uploadFile({
url:'http://localhost:8080/qq/img', // 后端api接口
filePath: res.tempFilePaths[0], // uni.chooseImage函数调用后获取的本地文件路劲
name:'files', //后端通过'files'获取上传的文件对象
header:{"Content-Type": "multipart/form-data"},
success:(res2) => {
console.log(res2.data)
}
});
}
});
后端
package com.demo.index;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.util.Date;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.qcloud.cos.COSClient;
import com.qcloud.cos.ClientConfig;
import com.qcloud.cos.auth.BasicCOSCredentials;
import com.qcloud.cos.auth.COSCredentials;
import com.qcloud.cos.model.PutObjectRequest;
import com.qcloud.cos.region.Region;
/**
* @Author: zml
* @Description: 描述
* @CreateDate: 2020/1/13
* @UpdateDate: 2020/1/13
* @UpdateRemark: 修改内容
* @Version: 1.0
*/
//@Controller
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/qq")
public class QQCOSTool {
private static final String SECRET_ID = "";//id
private static final String SECRET_KEY = "";//key
private static final String BUCKET = "";//桶名
private static final String REGION_NAME = "ap-beijing";
private static COSClient cosClient;
// 1 初始化用户身份信息(secretId, secretKey)。
private QQCOSTool(){
COSCredentials cred = new BasicCOSCredentials(SECRET_ID, SECRET_KEY);
// 2 设置 bucket 的区域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
Region region = new Region(REGION_NAME);
ClientConfig clientConfig = new ClientConfig(region);
// 3 生成 cos 客户端。
cosClient = new COSClient(cred, clientConfig);
}
// 如果client为空则实例
private static COSClient getInstance(){
if (cosClient == null){
new QQCOSTool();
}
return cosClient;
}
@PostMapping("img")
// @ResponseBody
public String addGoods(@RequestParam(value = "files", required = false) MultipartFile files){
try {
System.out.println(files);
return uploadPictureByFile(files);
} catch (Exception e) {
e.printStackTrace();
return "";
}
}
public static String uploadPictureByFile(MultipartFile files) throws Exception {
// 指定要上传的文件
File file = multipartFileToFile(files);
// MultipartFile file;
// 指定要上传到 COS 上对象键
String key = file.getName();//+"MyFile/" ;
// 存储空间
PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET, key, file);
COSClient cosClient = getInstance();
cosClient.putObject(putObjectRequest);
// 关闭客户端
cosClient.shutdown();
Date expiration = new Date(new Date().getTime() + 5 * 60 * 10000);
URL oldurl = cosClient.generatePresignedUrl(BUCKET, key, expiration);
// 获得链接后解析字符串并且返回
// 先将url转换为字符串
String url = oldurl.toString();
// http://jobpic-1258185724.cos.ap-guangzhou.myqcloud.com/image/T.jpg?sign
// 直接查找到第一个?的位置
url = url.substring(0, url.indexOf("?"));
// 开始解析字符串
return url;
}
/**
* MultipartFile 转 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.getSize() <= 0) {//"".equals(file) ||
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
依赖
<!-- 腾讯云上传 -->
<!-- https://mvnrepository.com/artifact/com.tencentcloudapi/tencentcloud-sdk-java -->
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.0.123</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>cos_api</artifactId>
<version>5.2.4</version>
</dependency>
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>qcloud-java-sdk</artifactId>
<version>2.0.1</version>
</dependency>