Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

后缀无效 #58

Open
XTUxiongda opened this issue Aug 13, 2024 · 0 comments
Open

后缀无效 #58

XTUxiongda opened this issue Aug 13, 2024 · 0 comments

Comments

@XTUxiongda
Copy link

`<|user|>
###LANGUAGE:JAVA
###MODE:LINE
<|code_suffix|>
return fastFdsFileBO;
} catch (IOException e) {
log.error("上传文件失败",e);
throw new BusinessException(FileReturnCode.FILE_UPLOAD_FAIL);
}
}

public FastFdsFileBO fastDfsUploadForReport(byte[] content, String originFileName, String fileName, String scene,
                                   String path) {
    try {
        long uploadStartTime = System.currentTimeMillis();
        Request request = createUploadRequest(content, fileName, scene, path);
        Response response = new OkHttpClient().newCall(request).execute();
        long uploadEndTime = System.currentTimeMillis();
        log.info("[文件上传] 上传文件服务器共耗时 {} 毫秒", uploadEndTime - uploadStartTime);
        if (!response.isSuccessful()) {
            log.error("文件上传失败: {}",response.body().string());
            throw new BusinessException(FileReturnCode.FILE_UPLOAD_FAIL);
        }

        FastFdsFileBO fastFdsFileBO = getFastFdsFileBO(response);
        fastFdsFileBO.setFileName(originFileName);
        if (StringUtils.isNotBlank(fastFdsFileBO.getFileUrl())) {
            // 将文件路径的协议从http更改为 https
            String fileUrl = fastFdsFileBO.getFileUrl().replaceFirst("http://", "https://");
            fastFdsFileBO.setFileUrl(fileUrl);
        }
        FileDO fileDO = BO2DOConvert.INSTANCE.fastFdsFileBO2FileDO(fastFdsFileBO);
        fileDao.save(fileDO);

        log.info("========fastDfsUpload=======fileDO:{}", JacksonUtil.toJSon(fileDO));

        long saveUploadInfoEndTime = System.currentTimeMillis();
        log.info("[文件上传] 保存文件信息耗时 {}毫秒", saveUploadInfoEndTime - uploadEndTime);
        fastFdsFileBO.setFileId(fileDO.getId());
        return fastFdsFileBO;
    } catch (IOException e) {
        log.error("上传文件失败",e);
        throw new BusinessException(FileReturnCode.FILE_UPLOAD_FAIL);
    }
}

public InputStream fastDfsDownload(String fileId) {
    long downloadStartTime = System.currentTimeMillis();
    FileDO fileDO = fileDao.getById(fileId);
    Request request = new Request.Builder()
            .url(fileDO.getFileUrl())
            .build();
    Response response;
    try {
        response = new OkHttpClient().newCall(request).execute();
    } catch (IOException e) {
        throw new BusinessException(FileReturnCode.DOWNLOAD_FILE_FAIL);
    }
    long downloadEndTime = System.currentTimeMillis();
    log.info("[文件下载] 获取文件信息耗时 {}毫秒", downloadEndTime - downloadStartTime);
    return response.body().byteStream();
}

public DownloadFileBO downloadFile(String fileId){

    long downloadStartTime = System.currentTimeMillis();

    FileDO fileDO = fileDao.getById(fileId);
    if (Objects.isNull(fileDO)) {
        throw new BusinessException(FileReturnCode.DOWNLOAD_FILE_FAIL.getMessage(),"未查到文件对象");
    }
    Request request = new Request.Builder()
            .url(fileDO.getFileUrl())
            .build();
    Response response;
    try {
        response = new OkHttpClient().newCall(request).execute();
    } catch (IOException e) {
        throw new BusinessException(FileReturnCode.DOWNLOAD_FILE_FAIL);
    }
    long downloadEndTime = System.currentTimeMillis();
    try {
        InputStream inputStream = response.body().byteStream();

        DownloadFileBO downloadFileBO = new DownloadFileBO();
        downloadFileBO.setFileName(fileDO.getFileName());
        downloadFileBO.setInputStream(inputStream);
        log.info("[文件下载] 获取文件信息耗时 {}毫秒", downloadEndTime - downloadStartTime);


        return downloadFileBO;
    }catch (Exception e){
        log.info("id为{}文件下载失败", fileId,e);
        throw new BusinessException(FileReturnCode.DOWNLOAD_FILE_FAIL);
    }

}


private Request createUploadRequest(byte[] content, String fileName, String scene, String path) {
    String uploadPath = serverUrl + FileConstants.URL_SEPARATOR + group + "/upload";
    String dateStr = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
    RequestBody fileBody = RequestBody.create(MediaType.parse("multipart/form-data"), content);

    log.info("========createUploadRequest=======file:{},path:{},scene:{},dateStr:{},content.length:{},uploadPath:{}"
            ,fileName,path,scene,dateStr,content.length,uploadPath);

    RequestBody requestBody = new MultipartBody.Builder()
            .setType(MultipartBody.FORM)
            .addFormDataPart("file", fileName, fileBody)
            .addFormDataPart("scene", scene)
            .addFormDataPart("output", "json")
            .addFormDataPart("path", path + dateStr)
            .build();
    return new Request.Builder()
            .url(uploadPath)
            .post(requestBody)
            .build();
}

private FastFdsFileBO getFastFdsFileBO(Response response) throws IOException {

    Map<String, Object> map = JacksonUtil.objectMapper.readValue(response.body().charStream(), Map.class);
    //Map<String, Object> map = new Gson().fromJson(response.body().charStream(), Map.class);
    FastFdsFileBO item = new FastFdsFileBO();
    item.setFileSize(Double.valueOf(map.get("size").toString()).longValue());
    item.setFileUrl(map.get("url").toString());
    item.setMd5(map.get("md5").toString());
    return item;
}

public List<FileUrlBO> queryFileUrl(List<String> fileIds) {
    List<FileDO> fileDOS = fileDao.list(Wrappers.<FileDO>lambdaQuery().in(FileDO::getId, fileIds));
    return DO2BOConvert.INSTANCE.fileDOS2FileUrlBOS(fileDOS);
}

public List<FileUrlBO> saveFileUrl(List<String> urls) {
    List<FileDO> fileDOS = new ArrayList<>(urls.size());
    for (String url : urls) {
        if (Objects.isNull(url)) {
            continue;
        }
        String filename = url.substring(url.lastIndexOf('/') + 1);
        FileDO fileDO = FileDO.builder()
                .fileName(filename)
                .fileSize(0L)
                .fileUrl(url)
                .build();
        fileDOS.add(fileDO);
    }
    fileDao.saveBatch(fileDOS);
    return DO2BOConvert.INSTANCE.fileDOS2FileUrlBOS(fileDOS);
}

public FileBO queryFile(String fileId) {

    FileDO fileDO = fileDao.getById(fileId);

    return DO2BOConvert.INSTANCE.fileDO2BO(fileDO);
}
public List<FileBO> queryFileList(List<String> fileIds) {

    List<FileDO> fileDOS = fileDao.listByIds(fileIds);

    return DO2BOConvert.INSTANCE.fileDOS2FileBOS(fileDOS);
}

/**
 * 查询文件信息,通过文件路径
 *
 * @param fileUrl 文件路径
 * @return 文件信息
 */
public FileBO queryFileInfoByUrl(String fileUrl) {
    if (StringUtils.isBlank(fileUrl)) {
        return null;
    }
    return DO2BOConvert.INSTANCE.fileDO2BO(
            fileDao.getOne(
                    Wrappers.<FileDO>lambdaQuery()
                            .eq(FileDO::getDeleteFlag, DeleteFlagEnum.UN_DELETED.getCode())
                            .eq(FileDO::getFileUrl, fileUrl)
                            .last("limit 1")
            )
    );
}

}
<|code_prefix|> package com.fofund.frp.file.domain.handler;

import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.fofund.common.enums.DeleteFlagEnum;
import com.fofund.common.exception.BusinessException;
import com.fofund.common.utils.JacksonUtil;
import com.fofund.frp.file.dao.FileDao;
import com.fofund.frp.file.domain.bo.DownloadFileBO;
import com.fofund.frp.file.domain.bo.FastFdsFileBO;
import com.fofund.frp.file.domain.bo.FileBO;
import com.fofund.frp.file.domain.bo.FileUrlBO;
import com.fofund.frp.file.domain.constant.FileConstants;
import com.fofund.frp.file.domain.convert.BO2DOConvert;
import com.fofund.frp.file.domain.convert.DO2BOConvert;
import com.fofund.frp.file.domain.enums.FileReturnCode;
import com.fofund.frp.file.model.FileDO;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**

  • FastFds 文件处理Handler

  • @author 王中一

  • @Version 1.0

  • @Date 2021-04-29 15:05
    */
    @component
    @slf4j
    public class FastDfsFileHandler {

    @value("${file.fastdfs.serverUrl:http://172.16.90.111}")
    private String serverUrl;

    @value("${file.fastdfs.group:fofund}")
    private String group;

    @Autowired
    private FileDao fileDao;

    public FastFdsFileBO fastDfsUpload(byte[] content, String originFileName, String fileName, String scene,
    String path) {
    try {
    long uploadStartTime = System.currentTimeMillis();
    Request request = createUploadRequest(content, fileName, scene, path);
    Response response = new OkHttpClient().newCall(request).execute();
    long uploadEndTime = System.currentTimeMillis();
    log.info("[文件上传] 上传文件服务器共耗时 {} 毫秒", uploadEndTime - uploadStartTime);
    if (!response.isSuccessful()) {
    log.error("文件上传失败: {}",response.body().string());
    throw new BusinessException(FileReturnCode.FILE_UPLOAD_FAIL);
    }

         FastFdsFileBO fastFdsFileBO = getFastFdsFileBO(response);
         fastFdsFileBO.setFileName(originFileName);
         if (StringUtils.isNotBlank(fastFdsFileBO.getFileUrl())) {
             // 将文件路径的协议从http更改为 https
             String fileUrl = fastFdsFileBO.getFileUrl().replaceFirst("http://", "https://");
             fastFdsFileBO.setFileUrl(fileUrl);
         }
         FileDO fileDO = BO2DOConvert.INSTANCE.fastFdsFileBO2FileDO(fastFdsFileBO);
         fileDao.save(fileDO);
    
         log.info("========fastDfsUpload=======fileDO:{}", JacksonUtil.toJSon(fileDO));
    
         long saveUploadInfoEndTime = System.currentTimeMillis();
         log.info("[文件上传] 保存文件信息耗时 {}毫秒", saveUploadInfoEndTime - uploadEndTime);
         fastFdsFileBO.setFileId(fileDO.getId());
           <|code_middle|><|assistant|>
    

`

传递的后缀失效,没产生作用,传和不传补全的内容都是一样的。补全的都是return fastFdsFileBO;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant