我想用表单上传 一个对象到华为桶,他们给的是一个字节流上传吧? 这个tobyte怎么赋值呢?谢谢
还有下面这个prfix怎么赋值呢?这是一个拼接对象名的。
前端就是一个input标签上传文件和名字等
它这个是要读取本地文件,上传 到华为云服务器的
private static String endPoint = "obs.cn-east-2.myhuaweicloud.com";
private static String ak = "FSJCCCERT3S5H2";
private static String sk = "7XCtFL7A6ssd344r3oHDtPXtXCvgoHxLiM4lD";
private static String bucketname="ert-fge-daily-public";
private static ObsClient obsClient = new ObsClient(ak, sk, endPoint);
public static String uploadToObs( InputStream inputStream,String objectname) throws IOException {
PutObjectRequest request = new PutObjectRequest(bucketname, objectname,inputStream);
request.setProgressListener(new ProgressListener() {
@Override
public void progressChanged(ProgressStatus status) {
// 获取上传平均速率
System.out.println("AverageSpeed:" + status.getAverageSpeed());
// 获取上传进度百分比
System.out.println("TransferPercentage:" + status.getTransferPercentage());
}
});
// 每上传1MB数据反馈上传进度
request.setProgressInterval(1024 * 1024L);
obsClient.putObject(request);
return "https://"+bucketname+"."+endPoint+"/"+objectname;
}
public static void listObjects(){
ListObjectsRequest request = new ListObjectsRequest(bucketname);
// 设置每页100个对象
request.setMaxKeys(100);
ObjectListing result;
do{
result = obsClient.listObjects(request);
for(ObsObject obsObject : result.getObjects()){
System.out.println("\t" + obsObject.getObjectKey());
System.out.println("\t" + obsObject.getOwner());
}
request.setMarker(result.getNextMarker());
}while(result.isTruncated());
}
public static void deleteObject(String objectname){
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
obsClient.deleteObject(bucketname, objectname);
}
public static boolean deleteObject2(String objectname){
try {
DeleteObjectsRequest deleteRequest = new DeleteObjectsRequest(bucketname);
deleteRequest.addKeyAndVersion(objectname);
DeleteObjectsResult deleteResult = obsClient.deleteObjects(deleteRequest);
List<DeleteObjectsResult.DeleteObjectResult> list = deleteResult.getDeletedObjectResults();
return list.size()>0&& objectname.equals(list.get(0).getObjectKey());
}catch (Exception e){
}
return false;
}
/**
* 列举桶
*/
public static void listBucketst(){
ListBucketsRequest request = new ListBucketsRequest();
request.setQueryLocation(true);
List<ObsBucket> buckets = obsClient.listBuckets(request);
for(ObsBucket bucket : buckets){
System.out.println("BucketName:" + bucket.getBucketName());
System.out.println("CreationDate:" + DateUtils.formatDate(bucket.getCreationDate(),"yyyy-MM-dd HH:mm:ss"));
System.out.println("Location:" + bucket.getLocation());
}
}
文件比较小用字节流好点,视频啥的用字符流
package com.bdqn;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class InputAndOutputDemo {
public static void main(String[] args) {
FileInputStream fis = null;
FileOutputStream fos = null;
try {
fis = new FileInputStream("hello.txt");
fos = new FileOutputStream("helloCopy.txt");
String str = "";
int len = -1;
// 将获得的二进制数转为字符串
while((len = fis.read())!=-1){
str += (char)len;
}
// 将字符串转为二进制byte数组
byte[] bytes = str.getBytes();
// 将二进制byte数组写到新文件
fos.write(bytes);
System.out.println("复制文件完成!");
fos.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if(fos!=null) {
fos.close();
}
if(fis!=null) {
fis.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这是一个直接读取本地的 你加上file参数就可以是上传形式的,然后存储到obs
```java
/**
* 上传对象
* @return
*/
@GetMapping("upload")
public String putLocalFile() {
//上传的文件
String path="D:\\temp\\456.mp4";
File file=new File(path);
UUID uuid=UUID.randomUUID();
//拼接一个新的名字 往华为云obs中存
String originalFileName = uuid.toString().replace("-","")+"456.mp4";
// 新建一个 输入流的空对象
FileInputStream fis=null;
ObsClient obsClient =null;
PutObjectResult putObjectResult = null;
String requestId=null;
try {
// 把file的数据写到fis里面
fis = new FileInputStream(file);
//存储到obs
putObjectResult = obsClient.putObject("xxxtest", originalFileName, fis);
//返回一个存储对象的id
requestId = putObjectResult.getRequestId();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
obsClient.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return requestId;
}
```
private static ByteArrayInputStream tobyte(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes))> 0){
byteArrayOutputStream.write(bytes,0,len);
}
return new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
}
prfix 是前缀自己定义的,没有固定结果