图片/视频上传(超简单教程)

#应用场景#

  • 该后端开发接口适用  图片/视频上传,返回路径名称场景

1.视频上传

写在Controller层

这里只是一个接收,调用uploadObject方法上传oss

public OmsResult<FileUploadDto> goodsUploadVideo(@RequestParam(value = "file") MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response) {
        FileUploadDto fileUploadDto = new FileUploadDto();
        if (null == multipartFile) {
            return OmsResult.error("文件传输格式错误");
        }

        String originalFilename = multipartFile.getOriginalFilename();
        if (StringUtil.isEmpty(originalFilename)) {
            return OmsResult.error("文件名缺失");
        }

        if (originalFilename != null) {
            // 校验文件扩展名
            if (!checkFormatVideo(originalFilename)) {
                return OmsResult.error("仅支持mp4, mov, m4v, flv, x-flv, mkv, wmv, avi格式");
            }

            // 校验文件大小
            if (multipartFile.getSize() > FileSizeConstant.FILE_20MB) {
                return OmsResult.error("文件大小不得超过20MB");
            }

            try {
                String[] split = originalFilename.split("\\.");
                // 拼接上传文件名GV+当前时间(24小时)+随机数
                String fileName = "GV" + "当前时间" + randomLetterGenerator() + "." + split[1];

                // 获取文件输入流
                InputStream inputStream = multipartFile.getInputStream();
                //上传文件到OSS
                //这行代码调用ossClient对象的uploadObject2OSS4SimplePathByIn方法,将文件上传到OSS。其中,inputStream是文件输入流,fileName是文件名,GV是文件在OSS中的存储路径前缀
                String url = ossClient.uploadObject(inputStream, fileName, "GV");
                log.info("goodsUploadVideo URL:{}", url);
                fileUploadDto.setFileUrl(fileName);
                fileUploadDto.setVideoSize(String.valueOf(multipartFile.getSize()));
                return OmsResult.success(fileUploadDto);
            } catch (Exception e) {
                log.error("goodsUploadVideo Error", e);
                return OmsResult.error("上传文件失败");
            }
      
    /**
     * 随机生成4位大写英文字母
     * @return
     */
    private String randomLetterGenerator() {
        SecureRandom random = new SecureRandom();
        StringBuilder randomLetters = new StringBuilder();
        for (int i = 0; i < 4; i++) {
            int index = random.nextInt(26);
            char letter = (char) ('a' + index);
            randomLetters.append(letter);
        }
        return randomLetters.toString();
    }

后缀校验

private boolean checkFormatVideo(String originalFilename) {
        if (StringUtil.isEmpty(originalFilename)) {
            return false;
        }
        String s = originalFilename.toLowerCase();
        //需要什么自己加后缀
        return s.endsWith(".mp4") || s.endsWith(".mov") || s.endsWith(".m4v") || s.endsWith(".flv")
                || s.endsWith(".x-flv") || s.endsWith(".mkv") || s.endsWith(".wmv") || s.endsWith(".avi");
    }

⭐最后说下uploadObject这个方法

这部分一般公司都有公共的轮子

public String uploadObject(InputStream in, String fileName, String folder, String... bucketName) {
        if (StringUtils.isEmpty(folder)) {
            folder = "";
        }

        String bucketNameTmp = this.bucketName;
        if (bucketName != null && bucketName.length > 0) {
            bucketNameTmp = bucketName[0];
        }

        String url = null;

 try {
            ObjectMetadata metadata = new ObjectMetadata();
            metadata.setContentLength((long)in.available());
            metadata.setCacheControl("no-cache");
            metadata.setHeader("Pragma", "no-cache");
            metadata.setContentEncoding("utf-8");
            metadata.setContentType(this.getContentType(fileName));
            metadata.setContentDisposition("filename/filesize=" + fileName);
            PutObjectResult putResult = this.ossClientConfig.putObject(bucketNameTmp, folder + fileName, in, metadata);
            String resultStr = putResult.getETag();
            if (StringUtils.isNotEmpty(resultStr)) {
                url = folder + fileName;
            }
        } catch (Exception var10) {
            var10.printStackTrace();
            log.error("上传阿里云OSS服务器异常." + var10.getMessage(), var10);
        }

        return url;
    }

这个是用于将文件上传到阿里云对象存储服务(OSS)的Java方法

  • 使用ossClientConfig对象的putObject方法执行上传操作。这个方法需要存储桶名称、文件路径(文件夹+文件名)、输入流和元数据信息。
  • PutObjectResult对象中获取ETag(一个代表文件内容的哈希值),并检查它是否为空。如果不为空,则设置url为上传文件的路径(文件夹+文件名)。
  • 如果在上传过程中发生异常,则捕获该异常并打印堆栈跟踪,并记录错误日志。

前端vue逻辑和oss方法可以参考一下这篇文章

http://t.csdnimg.cn/2yaig

2.图片上传

controller逻辑

public void uploadImportFile(@RequestParam("fileImport") MultipartFile fileImport, HttpServletRequest request, HttpServletResponse response) {
        JSONObject result = new JSONObject();
        BufferedInputStream in = null;
        try {
            // 上传文件类型 1商贸店铺申请附件 2商贸店铺LOGO附件 3其他
            String fileType = request.getParameter("fileType");
            if (null == fileImport || StringUtils.isBlank(fileImport.getOriginalFilename())) {
                result.put(ResponseConstant.RESPONSE_CODE, "400");
                result.put(ResponseConstant.RESPONSE_MSG, "上传的文件为空,请重新上传");
                this.writeData(result, response);
                return;
            }
            String fileName = fileImport.getOriginalFilename();
           // 判断文件大小
            if ("1".equals(fileType) || "2".equals(fileType)) {
                if("1".equals(fileType)){
                    if (fileImport.getSize() > FileSizeConstant.FILE_1MB) {
                        result.put(ResponseConstant.RESPONSE_CODE, "400");
                        result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出1M");
                        this.writeData(result, response);
                        return;
                    }
                } else if ("2".equals(fileType) && fileImport.getSize() > FileSizeConstant.FILE_20MB) {
                    result.put(ResponseConstant.RESPONSE_CODE, "400");
                    result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出20M");
                  if (!fileName.endsWith(".png") && !fileName.endsWith(".jpeg") && !fileName.endsWith(".jpg")) {
                    result.put(ResponseConstant.RESPONSE_CODE, "400");
                    result.put(ResponseConstant.RESPONSE_MSG, "上传的文件类型错误,请重新上传,只支持png、jpeg、jpg格式文件");
                    this.writeData(result, response);
                    return;
                }
            } else {
                if (fileImport.getSize() > FileSizeConstant.FILE_32MB) {
                    result.put(ResponseConstant.RESPONSE_CODE, "400");
                    result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出32M");
                    this.writeData(result, response);
                    return;
                }
                if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")
                        && !fileName.endsWith(".pdf") && !fileName.endsWith(".png") && !fileName.endsWith(".jpeg") && !fileName.endsWith(".jpg")
                        && !fileName.endsWith(".rar") && !fileName.endsWith(".zip")) {
                    result.put(ResponseConstant.RESPONSE_CODE, "400");
                    result.put(ResponseConstant.RESPONSE_MSG, "上传的文件类型错误,请重新上传,pdf、png、jpeg、jpg、xls、xlsx、rar、zip");
                    this.writeData(result, response);
                    return;
                }
            }
//上传文件的时间
            String uploadTime = DateUtils.getToday("yyyyMMddHHmmssSSS") + SaltUtil.getRandom();
            String fileNameNew = uploadTime + SaltUtil.randomGenerate() + fileName.substring(fileName.lastIndexOf("."));
            in = new BufferedInputStream(fileImport.getInputStream());
            String url = ossClient.uploadObject(in, fileNameNew, null);
            if (StringUtils.isNotBlank(url)) {
                result.put(ResponseConstant.RESPONSE_CODE, "200");
                result.put(ResponseConstant.RESPONSE_MSG, "上传成功");
                result.put("data", url);
                this.writeData(result, response);
            } else {
                result.put(ResponseConstant.RESPONSE_CODE, "400");
                result.put(ResponseConstant.RESPONSE_MSG, "上传失败,请重新上传");
                this.writeData(result, response);
            }
        } catch (Exception e) {
           log.error("上传文件异常:{}", e);
            result.put(ResponseConstant.RESPONSE_CODE, "500");
            result.put(ResponseConstant.RESPONSE_MSG, "系统繁忙,请稍后重试");
            this.writeData(result, response);
        } finally {
            IOUtils.closeQuietly(in);
        }
    }

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
介绍: 1、App封装 实现App封装,混合开发App,100多JS接口功能交互。 2、制作小程序 通过接口网站封装成小程序。 安装环境变色龙app封装系统源码 环境:PHP 5.6 MySQL 存储:七牛存储 源码介绍: 这款变色龙app封装系统源码更适合小企业主和个人用户,打包过程简单方便快捷。附件为变色龙app封装系统源码官方正版下载,无毒无后门,原汁原味。 源码功能介绍: 1、App封装 实现App封装,混合开发App,100多JS接口功能交互。 2、制作小程序 通过接口网站封装成小程序。 安装环境变色龙app封装系统源码 环境:PHP 5.6 MySQL 存储:七牛存储 环境要求: CPU:1核,内存:2G,硬盘:10G,1M带宽 不能用空间,有要修改php环境的要求。 版本区别: 1、免费版本 封装App 微信小程序 2、授权版本 封装App 微信小程序 分发App 在线签名 级签名 企业签名 苹果免签App 详细安装配置教程: 1、导入sql里数据表 ,文件 /sql/install.sql 2、修改:public/cmpl_config.php 内网址更换 ’master_site’=>’www.zywxfx.com’,//官网地址 ’source_site’=>’www.bslyun.com’,//存放用户配置资源的地址 ’db_site’=>’www.bslyun.com’,//数据库变动专用地址 ’https_site’=>’www.zywxfx.com’,//https官网地址 更换为自已的网址 db_config.php 修改数据库联接地址 3、网站启动https。 4、必须同步商品 后台商品内点同步。 5、如服务器是nginx的,配置nginx伪静态文件.txt IIS导入.htaccess配置文件。 6、php环境要求 system、popen、exec 函数开放 7、七牛的配置 对象存储->您的存储空间->图片样式->新建图片样式 选择手动编辑 编辑处理接口请填写:$0.apk 图片处理样式名称:atail 保存样 8、安装php的扩展imagick 9、增加php上传字节限制 max_input_vars = 2000 如果是windows服务器,请配置以下操作。不是windows服务器对以下操作忽略。 1、iis7以上,下载页404问题 https://www.cnblogs.com/imust2008/p/6829927.html 2、ipa包无法下载 打开Internet 服务管理器Internet 服务管理器–>网站属性–>HTTP头(MIME映射)–>新建 添加下列内容类型(MIME) 关联扩展名 plist application/xml 顺便加一个 ipa application/vnd.iphone 3、无法更新商品 文件在/system/common.php 注:解压密码打开压缩文件可以看到
在uniapp中上传图片/视频并添加水印,可以按照以下步骤: 1. 在前端页面中,添加一个文件上传控件,例如: ```html <template> <div> <input type="file" ref="fileInput" @change="uploadFile"> </div> </template> ``` 2. 在前端编写上传文件的逻辑,可以使用uniapp提供的上传组件,例如: ```js methods: { // 上传文件 uploadFile() { const file = this.$refs.fileInput.files[0] uni.uploadFile({ url: '/upload', filePath: file.tempFilePath, name: 'file', success: (res) => { console.log('上传成功', res) }, fail: (err) => { console.log('上传失败', err) } }) } } ``` 3. 在后端编写一个接口,用于接收上传的文件并添加水印。可以使用Java、PHP等语言实现添加水印的逻辑,下面以Java为例。在接口中,可以使用以下代码实现添加水印: ```java // 获取上传的文件 Part filePart = request.getPart("file"); String fileName = filePart.getSubmittedFileName(); InputStream fileContent = filePart.getInputStream(); // 添加水印 Image image = ImageIO.read(fileContent); Graphics2D g = image.createGraphics(); g.drawImage(image, 0, 0, null); g.setFont(new Font("Arial", Font.BOLD, 30)); g.setColor(Color.RED); g.drawString("Watermark", 10, 30); g.dispose(); // 保存文件到服务器 File file = new File("/path/to/save/" + fileName); ImageIO.write(image, "jpg", file); ``` 4. 在前端接收后端返回的结果,例如: ```js success: (res) => { console.log('上传成功', res) // 处理上传成功的逻辑 }, fail: (err) => { console.log('上传失败', err) // 处理上传失败的逻辑 } ``` 以上是uniapp中上传图片/视频并添加水印的基本步骤,需要注意的是,添加水印时需要使用服务器端的代码实现,客户端无法实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我老伯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值