使用springmvc上传图片并上传到阿里云对象存储

使用springmvc上传文件所用到的依赖有

		<dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.5</version>
        </dependency>

上传阿里云对象存储的依赖有

		<dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.16.1</version>
        </dependency>

springmvc的配置文件中要配置文件解析器,但是这个bean的id只能是multipartResolver,不然会出错。

<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
        <property name="defaultEncoding" value="UTF-8"></property>
<!--        最大为10M:1024*1024*10-->
        <property name="maxUploadSize" value="10485760"></property>
</bean>

前端的文件上传使用form表单和thymeleaf,要设置method为post,entype为multipart/form-data,

<form th:action="@{/test}" method="post" enctype="multipart/form-data">
            头像:<input type="file" name="file">
            <input type="submit" value="上传">
</form>

controller层代码为

	@RequestMapping(value = {"/test"})
    @ResponseBody
    public String testController(@RequestParam("file") MultipartFile uploadFile, HttpServletRequest request){
        System.out.println("------------");
        System.out.println(uploadFile.getOriginalFilename());
        String testaaa = UpPictureToOss.upLodeVegetableImg(uploadFile, "testaaa.jpg");
        System.out.println(testaaa);
        return "index";
    }

@RequestParam里面的内容要和前端上传文件中的name一致,其中UpPictureToOss.upLodeVegetableImg()是我写的使用阿里云对象存储的工具类,第一个参数为上传的图片,第二个参数为图片的名字(当然根据自己需要设置),工具类代码为

import com.aliyun.oss.*;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectRequest;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class UpPictureToOss {
    private final static String AccessKeyId="你的AccessKeyId";
    private final static String AccessKeySecret="你的AccessKeySecret";
    private final static String EndPoint="你的endpoint";
    private final static String BucketName="你的bucket";
    //下面这是我自己在bucket里面设置的文件夹,用于设置图片保存位置
    private final static String CarouselPicture="carousel/";
    private final static String VegetablePicture="vegetable/";
    private final static String Firfile="agriculture/";
    public static String upLodeVegetableImg(MultipartFile file,String fileName){
        OSS client = new OSSClientBuilder().build(EndPoint, AccessKeyId, AccessKeySecret);
        try {
            // 创建PutObjectRequest对象。
            ObjectMetadata metadata = new ObjectMetadata();
//            点击链接不会直接下载图片,如果不使用这个metadata也行,但是访问图片链接的时候会直接下载图片,使用了metadata设置setContentType("image/jpg")就能预览图片而不是直接下载
            metadata.setContentType("image/jpg");
            PutObjectRequest putObjectRequest = new PutObjectRequest(BucketName, Firfile+VegetablePicture+fileName, new ByteArrayInputStream(file.getBytes()),metadata);

            client.putObject(putObjectRequest);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }catch (OSSException oe){
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
            return null;
        }catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
            return null;
        } finally {
            if (client != null) {
                client.shutdown();
            }
        }
        String url="https://"+BucketName+"."+EndPoint+"/"+Firfile+VegetablePicture+fileName;
        return url;
    }
}

主要的流程参照这个文档:开发文档
AccessKeyId和AccessKeySecret在这里获取
在这里插入图片描述
在这里插入图片描述
进去向下划就能看到了,如果没有就创建一个,最后的那个URL就是上传图片的地址,通过这个地址就能使用img标签显示出来了。
OK,结束!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值