Java descarga archivos a través de la secuencia de archivos y la dirección del archivo

inserte la descripción de la imagen aquí

Descargar archivos a través de FileStream

Cómo usar MultipartFilepara cargar archivos, descargarlos localmente y devolver la ruta de guardado:

import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileUtils {
    
    

    private static final String UPLOAD_DIR = "/path/to/upload/directory/"; // 修改为您的上传目录

    public static String saveFileAndGetPath(MultipartFile file) throws IOException {
    
    
        String originalFileName = file.getOriginalFilename();
        String fileName = generateFileName(originalFileName);
        String filePath = UPLOAD_DIR + fileName;

        try (InputStream inputStream = file.getInputStream();
             BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath))) {
    
    

            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = inputStream.read(buffer)) != -1) {
    
    
                outputStream.write(buffer, 0, bytesRead);
            }
        }

        return filePath;
    }

    private static String generateFileName(String originalFileName) {
    
    
        String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 时间戳精确到秒
        int dotIndex = originalFileName.lastIndexOf(".");
        String extension = (dotIndex != -1) ? originalFileName.substring(dotIndex) : "";
        String fileNameWithoutExtension = (dotIndex != -1) ? originalFileName.substring(0, dotIndex) : originalFileName;

        return fileNameWithoutExtension + "_" + timestamp + extension;
    }
}

Se utiliza para obtener el flujo de archivos en la aplicación Spring Boot, luego procesar el archivo cargado, guardar el archivo en el directorio especificado y devolver la ruta del archivo guardado. Aquí hay una breve descripción de cada parte del código:

  1. Configuración del directorio de carga : en este ejemplo, UPLOAD_DIRlas constantes se utilizan para definir la ruta del directorio para cargar archivos. Debe modificar esto a la ruta donde realmente desea que se guarden sus archivos cargados.

  2. Guarde el archivo y obtenga la ruta : saveFileAndGetPathel método recibe un MultipartFileobjeto que representa el archivo cargado. En este método, guarde el archivo cargado en el directorio especificado y devuelva la ruta del archivo guardado.

  3. generar_nombre de archivo : generateFileNameel método se usa para generar un nuevo nombre de archivo con una marca de tiempo para evitar colisiones de nombres de archivos. Utiliza una marca de tiempo de la hora actual (precisa al segundo) como parte del nombre de archivo y conserva la extensión del nombre de archivo original.

  4. Lógica de carga : en saveFileAndGetPathel método, use MultipartFileel flujo de entrada del objeto para leer el contenido del archivo cargado y escriba el contenido en la ruta de archivo especificada a través del flujo de salida.

Descargar archivos por dirección de archivo

package com.ruoyi.im.utils;

import com.ruoyi.common.config.RuoYiConfig;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;

@Slf4j
public class FileUtils {
    
    

    /**
     * 默认路径
     */
    private static String defaultBaseDir = RuoYiConfig.getProfile();

    /**
     * 下载并保存文件
     *
     * @param url              url
     * @param originalFileName 原始文件名字
     * @return {@code String}
     */
    public static String downloadAndSaveFile(String url, String originalFileName) {
    
    
        try {
    
    
            URL fileUrl = new URL(url);
            HttpURLConnection connection = (HttpURLConnection) fileUrl.openConnection();
            connection.setRequestMethod("GET");

            String fileName = generateFileNameWithTimestamp(originalFileName);
            String savePath = generateSavePath(fileName);

            try (InputStream inputStream = connection.getInputStream();
                 BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(savePath))) {
    
    

                byte[] buffer = new byte[4096];
                int bytesRead;

                while ((bytesRead = inputStream.read(buffer)) != -1) {
    
    
                    outputStream.write(buffer, 0, bytesRead);
                }

                return convertToReturnPath(savePath);
            }

        } catch (IOException e) {
    
    
            e.printStackTrace();
            log.error("Error: " + e.getMessage());
            return null;
        }
    }

    /**
     * 生成文件名字和时间戳
     *
     * @param originalFileName 原始文件名字
     * @return {@code String}
     */
    private static String generateFileNameWithTimestamp(String originalFileName) {
    
    
        String timestamp = getCurrentTimestamp();
        int dotIndex = originalFileName.lastIndexOf(".");
        String extension = "";
        if (dotIndex != -1) {
    
    
            extension = originalFileName.substring(dotIndex);
            originalFileName = originalFileName.substring(0, dotIndex);
        }
        return originalFileName + "_" + timestamp + extension;
    }

    /**
     * 生成保存路径
     *
     * @param fileName 文件名称
     * @return {@code String}
     */
    private static String generateSavePath(String fileName) {
    
    
        Date currentDate = new Date();
        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
        SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
        SimpleDateFormat dayFormat = new SimpleDateFormat("dd");

        String year = yearFormat.format(currentDate);
        String month = monthFormat.format(currentDate);
        String day = dayFormat.format(currentDate);

        String filePath = defaultBaseDir + "/upload/" + year + "/" + month + "/" + day + "/";
        return filePath + fileName;
    }

    /**
     * 转换返回路径
     *
     * @param filePath 文件路径
     * @return {@code String}
     */
    private static String convertToReturnPath(String filePath) {
    
    
        String relativePath = filePath.replace(defaultBaseDir, "/profile");
        return relativePath.replace("\\", "/");
    }

    /**
     * 获得当前时间戳
     *
     * @return {@code String}
     */
    public static String getCurrentTimestamp() {
    
    
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        Date currentDate = new Date();
        return dateFormat.format(currentDate);
    }
}

Se utiliza para procesar las operaciones de descarga, guardado y conversión de rutas de archivos de acuerdo con la dirección URL del archivo. Aquí hay una breve descripción de cada parte del código:

  1. Importación y registro : las clases y los paquetes requeridos se importan y @Slf4jlas anotaciones se utilizan para generar automáticamente el código de registro.

  2. Rutas y métodos predeterminados :

    • defaultBaseDir: La ruta predeterminada para guardar archivos, RuoYiConfig.getProfile()obtenida a través del método, debe configurarla como el directorio real para guardar archivos.
    • downloadAndSaveFile(String url, String originalFileName): Descargue el archivo y guárdelo localmente, recibiendo la URL del archivo y el nombre del archivo original como parámetros.
    • generateFileNameWithTimestamp(String originalFileName): Genere un nuevo nombre de archivo con una marca de tiempo basada en el nombre de archivo original.
    • generateSavePath(String fileName): Genere la ruta del archivo guardado de acuerdo con el nombre del archivo, incluidos los subdirectorios de año, mes y día.
    • convertToReturnPath(String filePath): convierte la ruta del archivo al formato de ruta relativa devuelto.
  3. Lógica de descarga de archivos : en downloadAndSaveFileel método, al crear una conexión de URL, abra la conexión y obtenga el flujo de archivos. Luego use el flujo de entrada y el flujo de salida para guardar el archivo en el directorio especificado localmente, generando un nuevo nombre de archivo para evitar conflictos.

  4. Generar ruta para guardar : use la fecha y la hora actuales para generar una ruta para guardar el archivo, incluidos los subdirectorios de año, mes y día.

  5. Convertir ruta de retorno : convierte la ruta del archivo guardado a un /profileformato de ruta relativo a la ruta predeterminada.

  6. Obtenga la marca de tiempo actual : getCurrentTimestampobtenga la marca de tiempo de la hora actual a través del método, con una precisión de segundos, y utilícela para generar un nombre de archivo con una marca de tiempo.

Uso específico

¡Es muy simple, solo llámalo directamente! ! !

@GetMapping("/download")
    public AjaxResult downloadFilebyUrl(@RequestParam String url, @RequestParam String fielName) {
    
    
        String path = FileUtils.downloadAndSaveFile(url, fielName);
        if (StringUtils.isNotBlank(path)) {
    
    
            return AjaxResult.success(path);
        } else {
    
    
            return AjaxResult.error("文件下载失败!!!");
        }
    }

Supongo que te gusta

Origin blog.csdn.net/weixin_53742691/article/details/132287943
Recomendado
Clasificación