国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器)

這篇具有很好參考價值的文章主要介紹了Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Cloud Feign MultipartFile文件上傳踩坑之路總結(jié)

一、前端文件上傳

文件上傳組件用的是ant-design的a-upload組件,我的界面如下所示:
Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器),軟件開發(fā)架構(gòu)平臺,spring cloud,前端,服務(wù)器
文件上傳請求API:
FileUtils.js

import axios from "axios"

const uploadApi = ({file, URL, onUploadProgress}) => {
    const formData = new FormData()
    formData.append('file', file)
    return axios.post(URL, formData, {headers:{
        'Content-type': 'multipart/form-data',
      },
      onUploadProgress // 上傳進度回調(diào)函數(shù) onUploadProgress(ev))
    }) 
}

export default uploadApi;

需要注意的只有FileUtils.js定義的uploadApi請求函數(shù),其中URL為后端請求接口(“/imageConvert/upload”),文件上傳方法必須定義為POST,在headers加入’Content-type’: ‘multipart/form-data’,后端即可用@RequestParam或者@RequestPart + MultipartFile 來接受文件。
FileUpload.vue(無關(guān)緊要,用法大致相同,看你自己需求,這里只是提供一個參考范例)

// 自定義文件上傳公共函數(shù)
// e - 上傳組件返回的上傳實例,里面包括 file,和一些組件方法
// e.file - 上傳的文件實例對象
const customUpload = e => {
    let curFile = fileList.value.filter(item => item.uid == e.file.uid)[0]
    curFile.status = 'uploading'
    uploadApi({
        file: e.file,
        URL: '/imageConvert/upload',
        // uid: 'admin',  // 需要更改為用戶id,待修改
        onUploadProgress: ev => {
            // ev - axios 上傳進度實例,上傳過程觸發(fā)多次
            // ev.loaded 當(dāng)前已上傳內(nèi)容的大小,ev.total - 本次上傳請求內(nèi)容總大小
            // console.log(ev);
            const percent = (ev.loaded / ev.total) * 100;
            // 計算出上傳進度,調(diào)用組件進度條方法
            e.onProgress({ percent });
        }
    })
        .then(res => {
            let curFile = fileList.value.filter(item => item.uid == e.file.uid)[0]
            curFile.response = res.data
            if(res.data.code == 400) {
                curFile.status = 'error'
                curFile['error'] = curFile.response.msg
                console.error(`文件${curFile.name}上傳失敗:${res.data.msg}`)
            } else {
                // 通知組件該文件上傳成功
                curFile.status = 'done'
                curFile.url = res.data.data
                curFile.thumbUrl = res.data.data
                console.log(`文件${curFile.name}上傳成功`, curFile.url);
            }
        })
        .catch(err => {
            let curFile = fileList.value.filter(item => item.uid == e.file.uid)[0]
            curFile.status = 'error'
            curFile['error'] = '文件傳輸失敗'
            console.log('上傳失敗', err);
        })
}

二、后端處理

后端框架我這里使用的是Spring Cloud,將文件處理統(tǒng)一定義為一個單獨模塊,通過Feign為其他業(yè)務(wù)模塊提供服務(wù)。

服務(wù)提供者

Controller
這里注意要在@PostMapping加入MediaType.MULTIPART_FORM_DATA_VALUEMediaType.MULTIPART_FORM_DATA_VALUE,并且參數(shù)使用@RequestPart來接受參數(shù)

@RefreshScope
@RestController
@RequestMapping("/oss/file")
public class OSSFileController {
    @Autowired
    private IOSSService ossService;

    /**
     * 文件上傳,入?yún)⒖梢愿鶕?jù)具體業(yè)務(wù)進行添加
     * @param file 文件
     * @return 響應(yīng)結(jié)果
     */
    @PostMapping( value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public String uploadFile(@RequestPart("file") MultipartFile file, @RequestParam("storagePath") String storagePath) {
        return ossService.uploadFile(file, storagePath);
    }
}

Service(文件存儲方式跟Feign沒關(guān)系,可忽略)
收到文件后我們將其保存在aliyun-oss文件服務(wù)器中:
如何將文件保存在aliyun-oss具體請參考:Spring Boot 集成阿里云 OSS 進行文件存儲
或者可以使用file.transferTo(File file)保存至本地

**
 * OSS服務(wù)類
 * / @Author: ZenSheep
 * / @Date: 2023/8/10 16:05
 */
@Service
public class OSSService implements IOSSService {
    @Autowired
    private OSS ossClient;

    @Autowired
    private OSSConfiguration ossConfiguration;

    /**
     * 上傳文件到阿里云 OSS 服務(wù)器
     * 鏈接:https://help.aliyun.com/document_detail/oss/sdk/java-sdk/upload_object.html?spm=5176.docoss/user_guide/upload_object
     *
     * @param file 文件
     * @param storagePath 文件存儲路徑
     * @return 文件存儲完整路徑
     */
    @Override
    public String uploadFile(MultipartFile file, String storagePath) {
        String url = "";
        try {
            // UUID生成文件名,防止重復(fù)
            String fileName = "";
            String baseName = OSSFileUtils.getBaseName(OSSFileUtils.getBaseName(file.getOriginalFilename()));
            InputStream inputStream = file.getInputStream();
            // 創(chuàng)建ObjectMetadata,設(shè)置用戶自定義的元數(shù)據(jù)以及HTTP頭,比如內(nèi)容長度,ETag等
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(inputStream.available());
            objectMetadata.setCacheControl("no-cache");
            objectMetadata.setHeader("Pragma", "no-cache");
            objectMetadata.setContentType(OSSFileUtils.getcontentType(file.getOriginalFilename()));
            objectMetadata.setContentDisposition("inline;filename=" + baseName);
            fileName = storagePath + "/" + UUID.randomUUID().toString() + "/"  + file.getOriginalFilename();
            // 上傳文件:調(diào)用ossClient的putObject方法完成文件上傳,并返回文件名
            ossClient.putObject(ossConfiguration.getBucketName(), fileName, inputStream, objectMetadata);
            // 設(shè)置簽名URL過期時間,單位為毫秒。
            Date expiration = new Date(new Date().getTime() + 3600 * 1000);
            // 生成以GET方法訪問的簽名URL,訪客可以直接通過瀏覽器訪問相關(guān)內(nèi)容。
            url = ossClient.generatePresignedUrl(ossConfiguration.getBucketName(), fileName, expiration).toString();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return url;
    }
}

Feign

引入依賴:

        <!-- SpringCloud Openfeign -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

RemoteFileService
這里同樣需要注意:@PostMapping需要加入consumes = MediaType.MULTIPART_FORM_DATA_VALUE,參數(shù)傳遞用@RequestPart(“file”)

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

/**
 * File Feign: 提供File的遠程服務(wù)
 * / @Author: ZenSheep
 * / @Date: 2023/8/14 18:48
 */
@FeignClient(name = "opentool-system", contextId="remote-file")
public interface RemoteFileService {
    @PostMapping(value = "/oss/file/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String uploadFile(@RequestPart("file") MultipartFile file, @RequestParam("storagePath") String storagePath);
}

服務(wù)消費者

Controller

/**
 * 圖像轉(zhuǎn)換控制類
 * / @Author: ZenSheep
 * / @Date: 2023/8/14 18:59
 */
@RefreshScope
@RestController
@RequestMapping("/imageConvert")
public class ImageConvertController {
    @Autowired
    IImageConvertService iImageConvertService;
    @PostMapping("/upload")
    public R<?> uploadFile(@RequestPart("file") MultipartFile file) {
        return R.ok(iImageConvertService.uploadFile(file, "ImageConvert/images"));
    }
}

Service(在這里調(diào)用feign服務(wù))

/**
 * 圖像轉(zhuǎn)換服務(wù)類
 * / @Author: ZenSheep
 * / @Date: 2023/8/14 18:53
 */
@Service
public class ImageConvertService implements IImageConvertService {
    @Autowired
    private RemoteFileService remoteFileService;

    @Override
    public String uploadFile(MultipartFile file, String storagePath) {
       return remoteFileService.uploadFile(file, storagePath);
    }
}

ok,到這一步我們的工作就完成了,測試一下:
Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器),軟件開發(fā)架構(gòu)平臺,spring cloud,前端,服務(wù)器
Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器),軟件開發(fā)架構(gòu)平臺,spring cloud,前端,服務(wù)器
可以看到我們的文件已經(jīng)成功上傳,并成功保存至目標(biāo)服務(wù)器返回了一個文件存儲url,有什么不懂的可以在評論區(qū)問我,哪里講的不對請大佬輕噴,我也是第一次做文件傳輸。文章來源地址http://www.zghlxwxcb.cn/news/detail-661585.html

到了這里,關(guān)于Spring Cloud Feign MultipartFile文件上傳踩坑之路(包含前端文件上傳請求、后端文件保存到aliyun-oss文件服務(wù)器)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 批量上傳文件,以input上傳文件,后端以List<MultipartFile>類型接收

    批量上傳文件,以input上傳文件,后端以List<MultipartFile>類型接收

    最近公司要求要做一個批量上傳文件的功能,以往做的導(dǎo)入Excel表格、上傳圖片都是上傳一個文件的,此次在開發(fā)的過程中著實讓我犯了難,尤其是前后端對接的時候,這里做個記錄。 后端接口是這樣的,跟單個文件上傳相比就是將MultipartFile類型的數(shù)據(jù)變成了集合,這個Mu

    2024年02月07日
    瀏覽(15)
  • Postman本地測試上傳MultipartFile文件接口

    Postman本地測試上傳MultipartFile文件接口

    在請求Body中選擇form-data傳輸類型,填寫后端file參數(shù)名稱,并將參數(shù)設(shè)置為File類型,這時value輸入框?qū)⒆兂晌募x擇框。 如果此時發(fā)送請求給后端,會返回報錯request is not a multipart request. 我們還需要將數(shù)據(jù)傳輸類型Content-Type設(shè)置為multipart/form-data.

    2024年02月12日
    瀏覽(23)
  • 基于SpringWeb MultipartFile文件上傳、下載功能

    在Web開發(fā)中,文件上傳是一個常見的功能需求。Spring框架提供了MultipartFile接口,用于處理文件上傳請求。MultipartFile可以代表一個多部分文件上傳請求中的一個文件,提供了一系列方法用于獲取文件的各種屬性和內(nèi)容,使得在后端處理文件上傳變得十分方便。下面我們將介紹

    2024年04月17日
    瀏覽(29)
  • 【Spring Cloud系列】Feign詳解與實戰(zhàn)

    【Spring Cloud系列】Feign詳解與實戰(zhàn)

    在前一章介紹了Ribbon的用法,在使用Ribbon是通過RestTemplate調(diào)用其他服務(wù)的API時,所有參數(shù)必須在請求的URL中進行拼接。如果參數(shù)過多,拼接請求字符串會導(dǎo)致效率下降。Spring Cloud提供另外一種調(diào)用API的解決方案,既使用 Spring Cloud Feign 。 Feign是一種負載均衡的HTTP客戶端,它封

    2024年02月07日
    瀏覽(47)
  • 【Spring Cloud】如何使用Feign實現(xiàn)遠程調(diào)用

    【Spring Cloud】如何使用Feign實現(xiàn)遠程調(diào)用

    本次示例代碼的文件結(jié)構(gòu)如下圖所示。 在 order-service 的 pom.xml 文件中導(dǎo)入 Feign 的依賴坐標(biāo)。 在 order-service 的啟動類上添加注解 @EnableFeignClients ,以開啟 Feign 功能。 Feign 采用了 Spring MVC 的注解的方式發(fā)起遠程調(diào)用。只需要把發(fā) HTTP 請求的信息聲明在一個接口中,并添加注解

    2024年02月13日
    瀏覽(20)
  • MultipartFile上傳至服務(wù)器,文件名稱中文亂碼問題

    MultipartFile上傳至服務(wù)器,文件名稱中文亂碼問題

    1.首先查看服務(wù)器是否設(shè)置為了zh_CN.UTF-8 輸入命令:locale ?不是則,進行查看服務(wù)器上是否有zh_CN.UTF-8 查看所有可以使用的字符編碼集 輸入命令:locale -a ?如果沒有可用的zh_CN.UTF-8 則進行安裝: CentOS命令:yum install kde-l10n-Chinese -y? ubuntu命令:sudo apt-get install language-pack-zh-ha

    2024年02月10日
    瀏覽(26)
  • Spring Cloud Gateway如何優(yōu)雅地進行feign調(diào)用

    Spring Cloud Gateway如何優(yōu)雅地進行feign調(diào)用

    之前寫過一篇文章,介紹微服務(wù)場景下的權(quán)限處理,方案如下: 在實踐中,上面的網(wǎng)關(guān)選型為Spring Cloud Gateway,所以這里就存在一個問題,即網(wǎng)關(guān)如何調(diào)用用戶服務(wù)進行鑒權(quán)的問題。 在微服務(wù)場景下,服務(wù)間的調(diào)用可以通過feign的方式,但這里的問題是,網(wǎng)關(guān)是reactor模式,即

    2024年02月08日
    瀏覽(22)
  • Spring Cloud 實戰(zhàn) | 解密Feign底層原理,包含實戰(zhàn)源碼

    Spring Cloud 實戰(zhàn) | 解密Feign底層原理,包含實戰(zhàn)源碼

    專欄集錦,大佬們可以收藏以備不時之需 Spring Cloud實戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9270827.html Python 實戰(zhàn)專欄:https://blog.csdn.net/superdangbo/category_9271194.html Logback 詳解專欄:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow專欄:https://blog.csdn.net/superdangbo/category_869

    2024年02月06日
    瀏覽(24)
  • 【云原生】Spring Cloud Alibaba 之 Feign 遠程調(diào)用 實戰(zhàn)

    【云原生】Spring Cloud Alibaba 之 Feign 遠程調(diào)用 實戰(zhàn)

    在分布式領(lǐng)域中,一個系統(tǒng)由很多服務(wù)組成,不同的服務(wù)由各自的進程單獨負責(zé)。因此,遠程調(diào)用在分布式通信中尤為重要。 遠程調(diào)用可分如下兩類: 本地過程調(diào)用(Local Procedure Call,LPC) ,是指同一臺機器上運行的不同進程之間的互相通信,即在多進程操作系統(tǒng)中,運行

    2023年04月09日
    瀏覽(92)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包