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

基于SpringWeb MultipartFile文件上傳、下載功能

這篇具有很好參考價(jià)值的文章主要介紹了基于SpringWeb MultipartFile文件上傳、下載功能。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

1. 圖片上傳

在Web應(yīng)用中,圖片上傳是一種常見的場景。用戶需要上傳頭像、相片、證件照等圖片文件,而后端需要接收并保存這些文件。使用MultipartFile接口可以輕松地實(shí)現(xiàn)圖片文件的接收和處理。通過獲取文件的原始文件名、內(nèi)容類型、大小等屬性,我們可以實(shí)現(xiàn)對圖片文件的有效管理和存儲(chǔ)。例如,我們可以將圖片文件保存到服務(wù)器的文件系統(tǒng)中,或者將其存儲(chǔ)到云存儲(chǔ)服務(wù)中。

2. 文件下載

除了文件上傳,文件下載也是Web應(yīng)用中常見的功能需求。使用MultipartFile接口,我們可以實(shí)現(xiàn)文件的下載功能。在服務(wù)器端,我們可以將文件作為MultipartFile對象進(jìn)行處理,并通過設(shè)置響應(yīng)頭信息,將文件作為下載內(nèi)容返回給客戶端??蛻舳私邮盏轿募螅梢詫⑵浔4娴奖镜卮疟P或進(jìn)行其他處理。

3. 文件編輯

在Web應(yīng)用中,有時(shí)候用戶需要對上傳的文件進(jìn)行編輯操作,例如修改文件名、修改文件內(nèi)容等。使用MultipartFile接口,我們可以實(shí)現(xiàn)對文件的編輯功能。首先,我們可以通過MultipartFile接口獲取上傳的文件對象,然后對其進(jìn)行相應(yīng)的編輯操作。例如,我們可以修改文件的名稱、修改文件的內(nèi)容等。編輯完成后,我們可以將修改后的文件保存到服務(wù)器或返回給客戶端。

4. 文件預(yù)覽和展示

在Web應(yīng)用中,有時(shí)候我們需要將上傳的文件進(jìn)行預(yù)覽或展示。例如,在文檔管理系統(tǒng)中,用戶需要預(yù)覽或下載文檔文件。使用MultipartFile接口,我們可以實(shí)現(xiàn)文件的預(yù)覽和展示功能。我們可以將文件作為MultipartFile對象進(jìn)行處理,然后將其內(nèi)容轉(zhuǎn)換為適當(dāng)?shù)母袷竭M(jìn)行展示。例如,對于PDF文件,我們可以使用PDF閱讀器插件進(jìn)行展示;對于圖片文件,我們可以將其直接展示在網(wǎng)頁上。

5. 文件批量上傳和處理

在實(shí)際應(yīng)用中,有時(shí)候用戶需要批量上傳多個(gè)文件,并對這些文件進(jìn)行處理。使用MultipartFile接口,我們可以實(shí)現(xiàn)文件的批量上傳和處理功能。我們可以將多個(gè)文件作為一個(gè)多部分文件上傳請求進(jìn)行處理,然后對每個(gè)文件進(jìn)行相應(yīng)的操作。例如,我們可以將多個(gè)圖片文件批量上傳到服務(wù)器,并對它們進(jìn)行壓縮、裁剪等處理。

代碼

package com.javagpt.back.controller;

import com.javagpt.application.context.UserAppContextHolder;
import com.javagpt.application.file.FileApplicationService;
import com.javagpt.application.file.FileDTO;
import com.javagpt.common.annotation.RespSuccess;
import com.javagpt.common.constant.EMConstant;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

@Api(tags = "文件接口")
@Slf4j
@RestController
@RequestMapping(EMConstant.API_V1 + "/file")
@RespSuccess
@RequiredArgsConstructor
public class FileController {

    private final FileApplicationService fileApplicationService;

    @ApiOperation("通用文件上傳")
    @PostMapping(value = "/uploadFile")
    public FileDTO uploadFile(@RequestParam("file") MultipartFile multipartFile) throws IOException {
        Long enterpriseId = UserAppContextHolder.getCurrentUser().getEnterpriseId();
        FileDTO fileDTO = fileApplicationService.saveFile(enterpriseId, multipartFile);
        return fileDTO;
    }

    //@PreAuthorize("hasAuthority('mp:file:download')")
    @ApiOperation("下載文件")
    @GetMapping(value = "/downloadFile")
    public void download(@RequestParam(value = "id") Long id, HttpServletResponse response) throws IOException {
        fileApplicationService.downloadFile(response, id, UserAppContextHolder.getCurrentUser().getEnterpriseId());
    }

    @ApiOperation("查看文件信息")
    @GetMapping(value = "/info")
    public FileDTO fileInfo(@RequestParam(value = "id") Long id) throws IOException {
        return fileApplicationService.findById(id);
    }

    @ApiOperation("下載視頻")
    @GetMapping(value = "/downloadFile2")
    public void download2(@RequestParam(value = "id") Long id, HttpServletRequest request, HttpServletResponse response) throws IOException {
        fileApplicationService.downloadVideo(request, response, id, UserAppContextHolder.getCurrentUser().getEnterpriseId());
    }
}
package com.javagpt.application.file;

import com.javagpt.common.exception.BusinessRuntimeException;
import com.javagpt.common.oos.OssService;
import com.javagpt.common.util.ModelUtils;
import com.javagpt.common.util.SpringResponseUtils;
import com.javagpt.file.entity.FileEntity;
import com.javagpt.file.repository.FileRepository;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

@Service
@Slf4j
@RequiredArgsConstructor
public class FileApplicationService {

    private final OssService ossService;

    private final FileRepository fileRepository;


    public FileDTO findById(Long id) {
        FileEntity fileEntity = fileRepository.findById(id);
        return ModelUtils.convert(fileEntity, FileDTO.class);
    }

    @Transactional
    public FileDTO saveFile(Long enterpriseId, MultipartFile file) {
        FileEntity fileEntity = saveFile(enterpriseId, file, null);
        return ModelUtils.convert(fileEntity, FileDTO.class);
    }

    @Transactional
    public FileEntity saveFile(Long enterpriseId, MultipartFile file, String fileName) {
        String originalFilename = file.getOriginalFilename();
        String name = StringUtils.isBlank(fileName) ? FilenameUtils.getBaseName(originalFilename) : fileName;
        String suffix = FilenameUtils.getExtension(originalFilename);
        long size = file.getSize();
        FileEntity fileEntity = new FileEntity();
        fileEntity.setName(name).setSuffix(suffix).setSize(size).setEnterpriseId(enterpriseId);
        fileEntity = fileEntity.save();
        String key = fileEntity.getPath();
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e) {
            log.error("saveFile error:", e);
            throw BusinessRuntimeException.error("上傳文件失敗");
        }
        ossService.uploadFile(inputStream, key);
        IOUtils.closeQuietly(inputStream);
        return fileEntity;
    }


    @Transactional
    public FileEntity saveFile(File file) {
        long size = file.length();
        FileEntity fileEntity = new FileEntity();
        String baseName = FilenameUtils.getBaseName(file.getName());
        String extension = FilenameUtils.getExtension(file.getName());
        fileEntity.setName(baseName).setSuffix(extension).setSize(size);
        fileEntity = fileEntity.save();
        String key = fileEntity.getPath();
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream(file);
            ossService.uploadFile(inputStream, key);
        } catch (FileNotFoundException e) {
            log.error("saveFile error:", e);
            throw BusinessRuntimeException.error("上傳文件失敗");
        }
        IOUtils.closeQuietly(inputStream);
        return fileEntity;
    }


    public void downloadFile(HttpServletResponse response, Long fileId, Long enterpriseId) throws IOException {
        FileEntity fileEntity = fileRepository.findById(fileId);
        if (fileEntity == null) {
            throw BusinessRuntimeException.error("無效的文件Id");
        }
        String key = fileEntity.getPath();
        InputStream inputStream = ossService.downloadFile(key);
        SpringResponseUtils.writeAndFlushResponse(inputStream, response, fileEntity.fileFullName());
    }


    public void downloadVideo(HttpServletRequest request, HttpServletResponse response, Long fileId, Long enterpriseId) throws IOException {

        FileEntity fileEntity = fileRepository.findById(fileId);
        if (fileEntity == null) {
            throw BusinessRuntimeException.error("無效的文件Id");
        }
        response.setHeader(HttpHeaders.ACCEPT_RANGES, "bytes");
        Long fileSize = fileEntity.getSize();
        long start = 0, end = fileSize - 1;
        //判斷前端需不需要分片下載
        if (StringUtils.isNotBlank(request.getHeader("Range"))) {
            response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
            String numRange = request.getHeader("Range").replaceAll("bytes=", "");
            String[] strRange = numRange.split("-");
            if (strRange.length == 2) {
                start = Long.parseLong(strRange[0].trim());
                end = Long.parseLong(strRange[1].trim());
                //若結(jié)束字節(jié)超出文件大小 取文件大小
                if (end > fileSize - 1) {
                    end = fileSize - 1;
                }
            } else {
                //若只給一個(gè)長度  開始位置一直到結(jié)束
                start = Long.parseLong(numRange.replaceAll("-", "").trim());
            }
        }
        long rangeLength = end - start + 1;
        String contentRange = new StringBuffer("bytes ").append(start).append("-").append(end).append("/").append(fileSize).toString();
        response.setHeader(HttpHeaders.CONTENT_RANGE, contentRange);
        response.setHeader(HttpHeaders.CONTENT_LENGTH, String.valueOf(rangeLength));
        String key = fileEntity.getPath();
        InputStream inputStream = ossService.downloadFile2(key, start, end);
        SpringResponseUtils.writeAndFlushResponse(inputStream, response, fileEntity.fileFullName());
    }
}

總之,MultipartFile接口在Web應(yīng)用中具有廣泛的應(yīng)用場景,可以實(shí)現(xiàn)文件上傳、下載、編輯、預(yù)覽和批量處理等功能。通過熟練掌握MultipartFile接口的使用方法和技巧,我們可以更加高效地處理文件上傳和下載請求,提升Web應(yīng)用的用戶體驗(yàn)和功能性能。

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!文章來源地址http://www.zghlxwxcb.cn/news/detail-854310.html

到了這里,關(guān)于基于SpringWeb MultipartFile文件上傳、下載功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

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

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

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

    2024年02月12日
    瀏覽(23)
  • Spring Mvc 文件上傳(MultipartFile )—官方原版

    要啟動(dòng)Spring Boot MVC應(yīng)用程序,首先需要一個(gè)啟動(dòng)器。在這個(gè)示例中,已經(jīng)添加了spring-boot-starter thymelaf和spring-boot-starter web作為依賴項(xiàng)。要使用Servlet容器上傳文件,您需要注冊一個(gè)MultipartConfigElement類(在web.xml中為<multipart-config>)。多虧了Spring Boot,一切都可以自動(dòng)配置!

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

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

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

    2024年02月10日
    瀏覽(26)
  • Vue2-文件上傳、下載場景功能

    在項(xiàng)目開發(fā)中,上傳文件的應(yīng)用場景非常的多,一般情況下,上傳的接口都是由公司內(nèi)部自己開發(fā)一套適用于任何場景都可以使用的接口,但是這意味著該接口所涉及到的工作量與技術(shù)點(diǎn)就非常的多,且不穩(wěn)定。于是大公司選擇了前者自己研發(fā),小公司則選擇了性價(jià)比更高的

    2024年02月07日
    瀏覽(123)
  • 【SpringMVC】| 使用SpringMVC實(shí)現(xiàn)文件上傳 | 下載功能

    【SpringMVC】| 使用SpringMVC實(shí)現(xiàn)文件上傳 | 下載功能

    SpringMVC是一個(gè)Web框架,提供了許多有用的功能,包括文件上傳和下載。通過SpringMVC上傳和下載文件,您可以允許用戶上傳文件,以便將它們存儲(chǔ)在服務(wù)器上,或者允許用戶從服務(wù)器上下載文件。這些都可以為您的應(yīng)用程序添加有用的功能,例如: 允許用戶上傳和共享文件 -

    2024年02月02日
    瀏覽(128)
  • koa2文件的上傳下載功能

    const Router = require(“koa-router”); const upload = new Router(); const bodyParser = require(“koa-bodyparser”); const multer = require(\\\"@koa/multer\\\"); const path = require(“path”); const article = require(\\\"…/utils/sql\\\"); const { getCurrentTime } = require(\\\"…/utils/times\\\"); upload.use(bodyParser()); const storage = multer.diskStorage({ destin

    2024年02月02日
    瀏覽(29)
  • SpringBoot如何使用MultipartFile進(jìn)行文件上傳保存到服務(wù)器本地

    之前一直都是用的別人封裝好的文件上傳方法,這次想自己寫一個(gè)特別簡單的,文件上傳方法,非常適合新手觀看… 首先需要Springboot需要有Web依賴,就是下面這個(gè)依賴 依賴導(dǎo)完了,下面就直接是代碼,大家看一下 到這里文件上傳的解釋都在代碼里面,下面如果報(bào)文件過大的報(bào)錯(cuò)還需

    2024年02月13日
    瀏覽(31)
  • MultipartFile類型接收上傳文件報(bào)出的UncheckedIOException以及刪除tomcat臨時(shí)文件失敗源碼探索

    MultipartFile類型接收上傳文件報(bào)出的UncheckedIOException以及刪除tomcat臨時(shí)文件失敗源碼探索

    因?yàn)樾枰治鰯?shù)據(jù),待處理excel文件的數(shù)據(jù)行數(shù)太大,手動(dòng)太累,花半小時(shí)寫了一個(gè)定制的數(shù)據(jù)入庫工具,改成了通用的,整個(gè)項(xiàng)目中的萬級別數(shù)據(jù)都在工具上分析,寫SQL進(jìn)行分析,但是遇到很疑惑的問題,文件上傳結(jié)束收流時(shí),tomcat的DisFileItem類的delete方法會(huì)自動(dòng)調(diào)用,但是

    2024年02月15日
    瀏覽(18)
  • Spring Boot 中實(shí)現(xiàn)文件上傳、下載、刪除功能

    Spring Boot 中實(shí)現(xiàn)文件上傳、下載、刪除功能

    ??作者簡介,普修羅雙戰(zhàn)士,一直追求不斷學(xué)習(xí)和成長,在技術(shù)的道路上持續(xù)探索和實(shí)踐。 ??多年互聯(lián)網(wǎng)行業(yè)從業(yè)經(jīng)驗(yàn),歷任核心研發(fā)工程師,項(xiàng)目技術(shù)負(fù)責(zé)人。 ??歡迎 ??點(diǎn)贊?評論?收藏 ?? SpringBoot 領(lǐng)域知識(shí) ?? 鏈接 專欄 SpringBoot 專業(yè)知識(shí)學(xué)習(xí)一 SpringBoot專欄 Sprin

    2024年01月19日
    瀏覽(35)
  • Java Web 實(shí)現(xiàn)文件上傳和下載接口功能

    Java Web 實(shí)現(xiàn)文件上傳和下載接口功能

    上傳用post或者get請求都可以,這里代碼中用post做的示例。 文件下載除了靜態(tài)訪問(及nginx、tomcat等服務(wù)器映射到后的文件web路徑)下載以外?,還可以通過流的方式下載,代碼如下: 上傳用post或者get請求都可以,這里代碼中用post做的示例。 ?ForbiddenException 訪問權(quán)限異常類

    2024年02月11日
    瀏覽(106)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包