Tipo MIME (Extensões de correio da Internet multiuso, tipo de extensão de correio da Internet multiuso) Carregamento de arquivo multimídia MultipartFile

Introdução aos tipos de mídia MIME

主要作用前后端接收和响应数据类型一致,以及后端用什么类接收
Cada tipo de mídia possui um tipo MIME específico (Multipurpose Internet Mail Extensions, tipo Multipurpose Internet Mail Extensions), que é usado para identificar e transmitir o formato e o tipo de dados em protocolos como HTTP.
Esta frase ressalta que cada tipo de mídia possui um tipo MIME específico que é usado para identificar e transmitir o formato e tipo de dados em protocolos como HTTP.

Os tipos MIME (Multipurpose Internet Mail Extensions) são um padrão para identificar tipos de arquivos. Foi originalmente desenvolvido para email, onde é utilizado para indicar o tipo de anexo. Com o desenvolvimento da Internet, os tipos MIME também são utilizados em outras áreas, como a transmissão de dados no protocolo HTTP.

Um tipo MIME consiste em duas partes: o tipo principal e o subtipo, separados por barras. O tipo principal representa a ampla categoria de dados, como texto, imagem, áudio, vídeo, etc. Os subtipos descrevem mais especificamente o formato ou tipo de dados, por exemplo, o texto pode ter subtipos como texto simples, HTML, XML, etc.

Exemplos de tipos MIME comuns incluem:

  • Tipo de texto: texto/simples, texto/html, texto/xml
  • Tipo de imagem: imagem/jpeg, imagem/png, imagem/gif
  • Tipo de áudio: áudio/mpeg, áudio/wav, áudio/ogg
  • Tipo de vídeo: vídeo/mp4, vídeo/quicktime, vídeo/webm

No protocolo HTTP, o tipo MIME especifica o tipo e formato dos dados transmitidos por meio do campo de cabeçalho Content-Type. O servidor usa Content-Type na resposta para informar ao cliente o tipo de dados, e o cliente usa Content-Type na solicitação para informar ao servidor o tipo de dados enviados.

Ao usar tipos MIME apropriados, servidores e clientes podem analisar e processar dados corretamente, garantindo que os dados sejam exibidos ou processados ​​no formato correto. Por exemplo, se o tipo MIME retornado pelo servidor for image/jpeg, o cliente saberá que os dados são uma imagem formatada em JPEG e poderá processá-los adequadamente.

O que são MediaTypes

Sim, JSON (JavaScript Object Notation) é um formato de dados usado para representar dados estruturados. Mas na comunicação pela Internet, para identificar e transmitir dados JSON, é necessário utilizar um tipo de mídia específico, nomeadamente "application/json".

"application/json" significa que os dados são codificados no formato JSON e transmitidos usando o tipo MIME "application/json". Ele informa ao receptor que o conteúdo dos dados está no formato JSON e pode ser analisado e processado de maneira correspondente. Ao especificar o tipo de mídia "application/json", você pode garantir que tanto o remetente quanto o destinatário entendam corretamente o formato dos dados, evitando assim erros de análise e confusão de dados.

Na comunicação HTTP, o campo "Content-Type" no cabeçalho da solicitação ou no cabeçalho da resposta geralmente é usado para especificar o tipo de mídia dos dados transmitidos. Ao usar JSON como formato de dados, "Content-Type" geralmente é definido como "application/json" para informar claramente ao destinatário o tipo de dados.

Portanto, embora o próprio JSON seja um tipo de dados, para cumprir as especificações de comunicação da Internet e garantir a análise e o processamento corretos dos dados, precisamos codificar os dados JSON e usar "application/json" para especificar o método de transmissão de dados.
Tipos de mídia são especificações para identificar e descrever tipos de conteúdo na Internet. Eles geralmente consistem em duas partes: tipo principal (Tipo) e subtipo (Subtipo). Aqui estão alguns exemplos comuns de tipos de mídia:

  1. Tipo de texto:

    • texto/simples: formato de texto simples
    • texto/html: página HTML
    • text/css: folha de estilo CSS
    • texto/xml: dados XML
  2. Tipo de imagem:

    • imagem/jpeg: imagem JPEG
    • imagem/png: imagem PNG
    • imagem/gif: imagem GIF
    • imagem/svg+xml: imagem vetorial SVG
  3. Tipo de áudio:

    • áudio/mpeg: áudio MP3
    • áudio/wav: áudio WAV
    • áudio/aac: áudio AAC
  4. Tipo de vídeo:

    • vídeo/mp4: vídeo MP4
    • vídeo/mpeg: vídeo MPEG
    • vídeo/quicktime: vídeo QuickTime
  5. Tipo de aplicação:

    • aplicação/json: dados JSON
    • aplicação/xml: dados XML
    • aplicação/pdf: documento PDF
    • aplicação/fluxo de octetos: dados binários

Estes são apenas alguns exemplos de tipos de mídia comuns; existem muitos outros disponíveis. Cada tipo de mídia possui um tipo MIME específico (Multipurpose Internet Mail Extensions, tipo Multipurpose Internet Mail Extensions), que é usado para identificar e transmitir o formato e o tipo de dados em protocolos como HTTP.

Introdução à classe MultipartFile

A classe MultipartFile pode receber arquivos de imagem carregados. Na verdade, MultipartFile é uma interface universal que pode ser usada para receber qualquer tipo de arquivo, inclusive arquivos de imagem.
MultipartFileÉ uma interface no framework Spring usada para lidar com uploads de arquivos. Ele fornece uma série de métodos para manipular e acessar arquivos carregados.

A seguir estão alguns MultipartFilemétodos de interface comumente usados:

  1. getOriginalFilename(): Obtenha o nome do arquivo original do arquivo enviado.
  2. getBytes(): Retorna o conteúdo do arquivo carregado na forma de uma matriz de bytes.
  3. getInputStream(): Obtenha o fluxo de entrada do arquivo carregado, que pode ser usado para ler o conteúdo do arquivo.
  4. getSize(): Obtenha o tamanho do arquivo enviado, em bytes.
  5. getContentType(): obtenha o tipo de mídia do arquivo enviado.
  6. isEmpty(): determine se o arquivo carregado é um arquivo vazio.
  7. transferTo(File dest): salve o arquivo carregado no arquivo de destino especificado.

Use MultipartFilea classe para lidar com uploads de arquivos de maneira conveniente e obter informações relacionadas a arquivos. Através desses métodos, você pode obter informações como nome do arquivo, tamanho do arquivo, tipo de arquivo, etc. Você também pode salvar o arquivo no disco ou realizar outras operações.

Deve-se notar que MultipartFileé uma interface no framework Spring. A classe de implementação específica varia de acordo com o framework. Por exemplo, a classe de implementação comumente usada no Spring MVC é CommonsMultipartFile. Ao usar MultipartFile, você precisa introduzir as dependências correspondentes no projeto.

Em resumo, MultipartFilea interface fornece um conjunto de métodos convenientes para lidar com uploads de arquivos, simplificando o desenvolvimento e a operação das funções de upload de arquivos.

Os arquivos recebidos pela classe MultipartFile são binários?

Sim, MultipartFileos arquivos recebidos pela turma são transferidos em formato binário. Quer os arquivos carregados sejam imagens, vídeos, documentos ou outros tipos de arquivos de mídia, eles são convertidos em dados binários durante a transmissão.

Quando o front-end carrega um arquivo para o back-end por meio do protocolo HTTP, o arquivo é codificado em binário e enviado ao servidor back-end como parte do corpo da solicitação. Após o backend receber a solicitação, ele pode usar MultipartFilea classe para receber o arquivo de acordo com a definição da interface.

MultipartFileUma série de métodos é fornecida para lidar com esses dados de arquivos binários. Você pode usar getBytes()o método para obter a matriz de bytes do arquivo ou getInputStream()o método para obter o fluxo de entrada do arquivo, para que possa operar no arquivo, como armazená-lo no disco, lê-lo, processá-lo, etc.

Resumindo, MultipartFileos arquivos recebidos pela classe são, na verdade, transferidos em formato binário e você pode usar métodos relevantes para manipular esses dados binários.

Exemplo de código

MultipartFileA turma pode receber arquivos de imagem enviados. Na verdade, MultipartFileé uma interface genérica que pode ser utilizada para receber qualquer tipo de arquivo, inclusive arquivos de imagem.

Ao processar o upload do arquivo, passe o arquivo de imagem carregado para MultipartFileo objeto e, em seguida, use os métodos fornecidos pelo objeto para obter o nome do arquivo, tamanho do arquivo, tipo de arquivo e outras informações, ou salve o arquivo em um local especificado.

Exemplo de código mostrando como usar para MultipartFilereceber arquivos de imagem enviados:

import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;

public class ImageUploader {
    
    

    public void uploadImage(MultipartFile imageFile, String targetPath) throws IOException {
    
    
        // 获取图片文件名
        String fileName = imageFile.getOriginalFilename();
        
        // 获取图片文件大小
        long fileSize = imageFile.getSize();
        
        // 获取图片文件类型
        String fileType = imageFile.getContentType();
        
        // 将图片文件保存到目标路径
        imageFile.transferTo(new File(targetPath));
    }

}

uploadImageO método recebe um MultipartFileobjeto e o caminho de destino. Chamando métodos getOriginalFilenamecomo , getSizee getContentType, você pode obter informações relevantes sobre os arquivos de imagem carregados. Finalmente, transferTosalve o arquivo de imagem no caminho de destino chamando o método.

Quais são as classes que implementam a interface MultipartFile para arquivos carregados?

CommonsFileUploadSupport
MockMultipartFile
StandardMultipartHttpServletRequest

Quando o método da interface for finalmente chamado, qual classe irá implementá-lo e como decidir qual classe irá implementá-lo?

Ao implementar MultipartFileuma interface, qual classe usar como implementação depende do ambiente de execução e da configuração do seu projeto.

  1. Se você usar a estrutura Spring MVC e apresentar commons-fileuploada biblioteca, normalmente usará CommonsMultipartFilea classe como MultipartFilea classe de implementação da interface. Esta é a implementação padrão fornecida pelo Spring para lidar com uploads de arquivos.

  2. Em cenários de teste unitário ou simulação, pode ser necessário usar MockMultipartFileuma classe como MultipartFileclasse de implementação da interface. Ele permite criar MultipartFileobjetos fictícios para teste ou simular operações de upload de arquivos.

  3. Se um contêiner Servlet 3.0+ (como Tomcat 7 ou superior) for usado no projeto, você poderá usar diretamente StandardMultipartHttpServletRequesta classe fornecida pelo contêiner como MultipartFilea classe de implementação da interface. É baseado na interface da especificação Servlet 3.0 javax.servlet.http.Parte não requer a introdução de dependências adicionais.

Quando o método da interface for finalmente chamado, a estrutura Spring selecionará automaticamente a MultipartFileclasse de implementação apropriada para instanciação com base na configuração. A instância específica de qual classe escolher depende da configuração e do ambiente operacional do projeto.

Se você usar Spring MVC, a classe será usada como classe de implementação por padrão CommonsMultipartFile. Pode ser configurado no arquivo de configuração multipartResolverpara especificar explicitamente o analisador e a classe de implementação usada. Se não houver requisitos especiais, geralmente não há necessidade de especificar manualmente a classe de implementação. O Spring selecionará automaticamente a classe de implementação apropriada com base no ambiente em execução.

Resumindo, qual classe escolher como MultipartFileclasse de implementação depende da configuração do projeto e do ambiente de execução. Por padrão, o Spring MVC o utiliza CommonsMultipartFile, mas pode ser usado em cenários de teste ou simulados MockMultipartFile. Em contêineres Servlet 3.0+, ele pode ser usado diretamente StandardMultipartHttpServletRequest. Você também pode especificar explicitamente o analisador e a classe de implementação a serem usados ​​por meio de arquivos de configuração ou código.

O Spring selecionará automaticamente a classe de implementação apropriada com base no ambiente em execução. Como implementá-lo automaticamente

Quando o Spring seleciona automaticamente a MultipartFileclasse de implementação apropriada, ele o faz principalmente por meio dos dois mecanismos a seguir:

  1. Detecção de dependência e configuração automática: O framework Spring detectará as dependências introduzidas no projeto e configurará automaticamente as MultipartFileclasses de implementação correspondentes com base nos resultados da detecção. Por exemplo, se você importar commons-fileuploada biblioteca, o Spring a configurará automaticamente CommonsMultipartFilecomo a classe de implementação padrão. Isso ocorre porque commons-fileuploadé fornecido suporte para upload de arquivos.

  2. Suporte ao ambiente de tempo de execução: se o seu projeto for executado em um contêiner Servlet 3.0+ (como Tomcat 7 ou superior) e o analisador não estiver configurado explicitamente, o Spring será automaticamente selecionado como a classe de implementação StandardMultipartHttpServletRequest. Isso ocorre porque a especificação Servlet 3.0 fornece suporte nativo para uploads de arquivos. Nesse caso, nenhuma dependência adicional é necessária e o Spring usa o analisador fornecido pelo contêiner para lidar com o upload do arquivo.

Obviamente, você também pode especificar manualmente o analisador e a classe de implementação usados ​​por meio do arquivo ou código de configuração, substituindo o comportamento padrão selecionado automaticamente.

Resumindo, o Spring seleciona automaticamente a MultipartFileclasse de implementação apropriada com base na detecção de dependência e nos mecanismos de configuração automática e no suporte do ambiente em execução.

Como configurar manualmente o analisador de upload de arquivo

Adicione a seguinte configuração no arquivo de configuração do Spring (geralmente applicationContext.xml ou spring-config.xml):
Ao configurar CommonsMultipartResolver, você pode definir algumas propriedades conforme necessário. Aqui está um exemplo:
Desculpe pela confusão. Verifiquei as respostas anteriores e os detalhes sobre como configurá-lo manualmente não foram fornecidos corretamente. Nós pedimos desculpas.

Para configurar manualmente a classe de implementação usada MultipartFile, você pode seguir estas etapas:

  1. Adicione a seguinte configuração no arquivo de configuração do Spring (geralmente ou applicationContext.xml) :spring-config.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 配置其他属性 -->
</bean>

O exemplo acima configura CommonsMultipartFilecomo MultipartFilea classe de implementação do . Pode ser alterado para outras classes de implementação conforme necessário, StandardServletMultipartResolverpor ex.

  1. Dependendo da classe de implementação escolhida, pode ser necessário adicionar dependências correspondentes. Por exemplo, se você selecionar CommonsMultipartFile, certifique-se de ter adicionado dependências para commons-fileuploade commons-io.

  2. Dependendo das necessidades do seu projeto, você pode personalizar ainda mais o comportamento configurando propriedades MultipartFile. Por exemplo, você pode definir o tamanho máximo dos arquivos carregados, caminho de armazenamento de arquivos temporários, etc. A configuração específica da propriedade depende da classe de implementação selecionada e da versão da estrutura.

Observe que este é apenas um método de configuração manual e o método específico pode variar dependendo de fatores como ambiente do projeto, versão da estrutura, etc. Recomenda-se que você revise cuidadosamente a documentação relevante e configure-a adequadamente de acordo com as necessidades do seu projeto. Se você tiver mais alguma dúvida, sinta-se à vontade para perguntar.

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设置最大上传文件大小为10MB -->
    <property name="maxUploadSize" value="10485760" />
    <!-- 设置请求的字符编码 -->
    <property name="defaultEncoding" value="UTF-8" />
    <!-- 设置临时文件存储路径 -->
    <property name="uploadTempDir" value="C:/temp" />
    <!-- 其他属性配置 -->
</bean>

No exemplo acima, definimos três propriedades comumente usadas:

  • maxUploadSize: defina o tamanho máximo do arquivo de upload em bytes. No exemplo acima, ele está definido como 10 MB, que é 10*1024*1024 bytes.
  • defaultEncoding: Defina a codificação de caracteres solicitada, o padrão é UTF-8. Isso será usado para analisar a parte do texto da solicitação.
  • uploadTempDir: defina o caminho de armazenamento do arquivo temporário. No exemplo acima, ele está definido como C:/temp. Todos os arquivos enviados serão armazenados em uma pasta temporária neste caminho.

Acho que você gosta

Origin blog.csdn.net/beiback/article/details/132644326
Recomendado
Clasificación