java中字节流设置与文件前缀

我想用表单上传 一个对象到华为桶,他们给的是一个字节流上传吧? 这个tobyte怎么赋值呢?谢谢

img

还有下面这个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 是前缀自己定义的,没有固定结果