欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java服務器處理圖片上傳的方法

 更新時間:2022年06月23日 16:44:17   作者:江湖見  
這篇文章主要為大家詳細介紹了Java服務器處理圖片上傳,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Java服務器處理圖片上傳的具體代碼,供大家參考,具體內容如下

一、簡述

第一:瀏覽器上傳圖片實現(xiàn);

第二:微信小程序上傳圖片實現(xiàn);

二、圖片上傳功能實現(xiàn)

1.處理H5的單文件上傳實現(xiàn):

package cn.ncist.tms.attachment.controller;
?
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
?
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
?
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
?
/**
?* 附件上傳類
?*?
?* @author Fxh
?*
?*/
@RequestMapping(value = "/fileUpload")
@Controller
public class AttachmentUpload {
?? ?
?? ?/**
?? ? * 上傳文件功能,以Post請求發(fā)送請求,
?? ? *?
?? ? * @param request:請求對象
?? ? * @param reponse:響應對象
?? ? * @param file:上傳的文件對象
?? ? * @return JSON串 : {"code":"S","msg":"服務調用成功"}
?? ? * @throws IOException?
?? ? */
?? ?@RequestMapping(value = "/doFileUpload",method = RequestMethod.POST)
?? ?@ResponseBody
?? ?public Map<String,Object> doFileUpload(HttpServletRequest request,
?? ??? ??? ?HttpServletResponse reponse,
?? ??? ??? ?@RequestParam("file") MultipartFile srcFile) throws IOException{
?? ??? ?
?? ??? ?/*
?? ??? ? * 注意:傳入參數(shù)時,文件的注解@ReuqestParam("variable") -->variable指:前端的h5的控件的name值.
?? ??? ? *?
?? ??? ? * 文件處理功能: 1.將獲取的字節(jié)數(shù)組轉化為文件對象,并保存在本地目錄中;
?? ??? ? *?
?? ??? ? * 文件處理思路: 1.將獲取的(source)file對象,通過函數(shù)獲取字節(jié)數(shù)組;
?? ??? ? * ?? ??? ??? ??? ?2.實例化文件對象和文件輸出流;
?? ??? ? * ?? ??? ??? ??? ?3.將字節(jié)數(shù)組寫入文件即可.
?? ??? ? *?
?? ??? ? * 功能難度: 簡單.
?? ??? ? */
?? ??? ?
?? ??? ?//1.變量聲明
?? ??? ?Map<String,Object> result = null;// 返回結果變量
?? ??? ?FileOutputStream fos = null; ?? ?//寫入文件的變量
?? ??? ?File destFile = null;?? ?//寫入的目的地文件(distination)
?? ??? ?
?? ??? ?try {
?? ??? ??? ?result = new HashMap<String,Object>();
?? ??? ??? ?
?? ??? ??? ?//2.參數(shù)驗證
?? ??? ??? ?if(srcFile == null){
?? ??? ??? ??? ?throw new RuntimeException("上傳文件不存在");
?? ??? ??? ?}
?? ??? ??? ?if(srcFile.getBytes().length == 0){
?? ??? ??? ??? ?throw new RuntimeException("上傳文件內容為空");
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//3.操作文件對象,寫入本地目錄的文件中
?? ??? ??? ?
?? ??? ??? ?//3.1 截取文件后綴
?? ??? ??? ?String ext = srcFile.getOriginalFilename().substring(srcFile.getContentType().lastIndexOf( ".")+1);
?? ??? ??? ?//3.2 實例化目標文件,根據當前的操作系統(tǒng),指定目錄文件,
?? ??? ??? ?destFile = new File("D:"+File.separator+"descFolder"+File.separator+"descFile."+ext);
?? ??? ??? ?//3.3 實例化流
?? ??? ??? ?fos = new FileOutputStream(destFile);
?? ??? ??? ?//3.4 獲取寫入的字節(jié)數(shù)組,并寫入文件?? ?
?? ??? ??? ?byte[] srcBytes = srcFile.getBytes();
?? ??? ??? ?fos.write(srcBytes);
?? ??? ??? ?fos.flush();
?? ??? ??? ?//4.對輸入、輸出流進行統(tǒng)一管理
?? ??? ??? ?//已在文件finally代碼塊處理
?? ??? ??? ?
?? ??? ??? ?result.put( "code", "S");
?? ??? ??? ?result.put( "msg", "服務調用成功");
?? ??? ??? ?result.put( "path", destFile.getAbsolutePath());
?? ??? ??? ?return result;
?? ??? ?} catch (Exception e) {
?? ??? ??? ?// TODO: handle exception
?? ??? ??? ?e.printStackTrace();
?? ??? ??? ?result = new HashMap<String,Object>();
?? ??? ??? ?result.put( "code", "F");
?? ??? ??? ?result.put( "msg", "服務調用失敗");
?? ??? ??? ?result.put( "path", null);
?? ??? ??? ?return result;
?? ??? ?} finally{
?? ??? ??? ?//關閉系統(tǒng)資源,避免占用資源.
?? ??? ??? ?if(fos != null){
?? ??? ??? ??? ?fos.close();
?? ??? ??? ?}
?? ??? ?}
?? ?}
}

2.微信或手機APP上傳圖片文件的代碼實現(xiàn):

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
?
import javax.annotation.Resource;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
?
import org.jboss.netty.handler.codec.http.HttpRequest;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
?
import com.hlinkcloud.ubp.core.constant.RedisKeyConstant;
import com.hlinkcloud.ubp.core.service.RedisService;
import com.hlinkcloud.ubp.core.util.BaseStringUtil;
import com.hlinkcloud.ubp.facade.bean.common.FastDFSFile;
import com.hlinkcloud.ubp.facade.bean.common.FileManagerConfig;
import com.hlinkcloud.ubp.facade.service.common.FileInfoService;
import com.hlinkcloud.ubp.facade.service.permission.UserService;
import com.hlinkcloud.ubp.facade.util.DictionaryCommUtil;
?
import fr.opensagres.xdocreport.core.io.internal.ByteArrayOutputStream;
?
/**
?* 微信上傳圖片業(yè)務
?*?
?* @author FengQi
?*
?*/
@Controller
@RequestMapping("/wx_upload")
public class WxUploadImgBusiness {
?
?? ?@Resource
?? ?private UserService userService;
?
?? ?@Resource
?? ?private RedisService redisService;
?
?? ?@Resource(name = "commonUtil")
?? ?private DictionaryCommUtil commUtil;
?
?? ?@Resource
?? ?private FileInfoService fileService; /* 文件服務 */
?? ?
?? ?@RequestMapping("/getUploadFilePath")
?? ?@ResponseBody
?? ?public Map<String, Object> doWxUploadFile(HttpServletRequest request, HttpServletResponse response) {
?
?? ??? ?HashMap<String, Object> map = new HashMap<String, Object>();
?? ??? ?
?? ??? ?try {
?? ??? ??? ?
?? ??? ??? ?/*
?? ??? ??? ? * // 注釋:該部分是使用在沒有使用sprinvMVC的架構下的圖片上傳. // 1.磁盤文件條目工廠
?? ??? ??? ? * DiskFileItemFactory factory = new DiskFileItemFactory();
?? ??? ??? ? *?
?? ??? ??? ? * //2.1 高速的文件上傳處理類 ServletFileUpload sfu = new
?? ??? ??? ? * ServletFileUpload(factory);
?? ??? ??? ? *?
?? ??? ??? ? * List<FileItem> list = sfu.parseRequest(request); FileItem picture
?? ??? ??? ? * = null; if(list != null && list.size() > 0){ for(FileItem item :
?? ??? ??? ? * list){ if(!item.isFormField()){ picture = item; } } }
?? ??? ??? ? */
?
?? ??? ??? ?// 1.將請求轉化為操作流的請求對象.
?? ??? ??? ?MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
?? ??? ??? ?MultipartFile picture = req.getFile("file");
?? ??? ??? ?
?? ??? ??? ?if(picture != null && picture.getBytes().length != 0){
?? ??? ??? ??? ?// 2.將圖片上傳到服務器
?? ??? ??? ??? ?byte[] bytes = picture.getBytes();
?? ??? ??? ??? ?String ext = picture.getOriginalFilename().substring(
?? ??? ??? ??? ??? ??? ?picture.getOriginalFilename().lastIndexOf(".") + 1
?? ??? ??? ??? ??? ??? ?);
?? ??? ??? ??? ?// (備注:下列代碼為內部業(yè)務代碼,可根據公司自身的需求,進行更改)
?? ??? ??? ??? ?
?? ??? ??? ??? ?
?? ??? ??? ??? ?map.put("code", "S");
?? ??? ??? ??? ?map.put( "msg", "服務調用成功");
?? ??? ??? ??? ?map.put("statusCode", 200);
?? ??? ??? ??? ?map.put("data", filePath);
?? ??? ??? ?}else{
?? ??? ??? ??? ?throw new RuntimeException("上傳圖片異?;蚩請D片!");
?? ??? ??? ?}
?? ??? ?} catch (IOException e) {
?? ??? ??? ?e.printStackTrace();
?? ??? ??? ?map.put("code", "F");
?? ??? ??? ?map.put("msg", "服務調用失敗");
?? ??? ??? ?map.put("statusCode", 500);
?? ??? ??? ?map.put("data", null);
?? ??? ?}
?? ??? ?return map;
?? ?}
?? ?
?? ?/**
?? ? * 當不知道手機、微信傳入前端的參數(shù)是什么時,
?? ? *?
?? ? * 可調用該接口進行判斷.
?? ? *?
?? ? * @param request
?? ? * @param response
?? ? * @return
?? ? * @throws IOException
?? ? */
?? ?@RequestMapping(value = "/doUploadFileOfCI" , method = RequestMethod.POST )
?? ?public @ResponseBody Map<String,Object> doUploadFile(
?? ??? ??? ?HttpServletRequest request,//請求對象
?? ??? ??? ?HttpServletResponse response) throws IOException{//響應對象
?? ??? ?
?? ??? ?System.out.println("doTestMultipartFile:");
?? ??? ?
?? ??? ?MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
?? ??? ?//此時說明請求對象是MultipartHttpServletRequest對象
?? ??? ?MultipartFile picture = req.getFile("UploadedImage");
?? ??? ?
?? ??? ?//遍歷請求得到所有的數(shù)據.
?? ??? ?if(req != null){
?? ??? ??? ?
?? ??? ??? ?//獲取所有屬性名
?? ??? ??? ?Enumeration enume= req.getAttributeNames();
?? ??? ??? ?while(enume.hasMoreElements()){
?? ??? ??? ??? ?System.out.println("enume:"+enume.nextElement());
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//獲取所有文件名
?? ??? ??? ?Iterator<String> fileNames = req.getFileNames();
?? ??? ??? ?while(fileNames.hasNext()){
?? ??? ??? ??? ?System.out.println("fileNames:"+fileNames.next());
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//獲取操作文件的map
?? ??? ??? ?Map<String,MultipartFile> fileMap = ?req.getFileMap();
?? ??? ??? ?if(fileMap != null && fileMap.size() > 0){
?? ??? ??? ??? ?Set<String> set = fileMap.keySet();
?? ??? ??? ??? ?for(String key:set){
?? ??? ??? ??? ??? ?System.out.println("String:"+key);
?? ??? ??? ??? ?}
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//獲取請求流
?? ??? ??? ?InputStream is = req.getInputStream();
?? ??? ??? ?System.out.println("InputStream:"+is);
?? ??? ??? ?int length = -1;
?? ??? ??? ?while( (length = is.read()) != -1 ){
?? ??? ??? ??? ?System.err.println("data:"+length);
?? ??? ??? ?}
?? ??? ??? ?
?? ??? ??? ?//獲取所有請求參數(shù)
?? ??? ??? ?Enumeration enumee = req.getParameterNames();
?? ??? ??? ?while(enumee.hasMoreElements()){
?? ??? ??? ??? ?System.out.println("enumee:"+enumee.nextElement());
?? ??? ??? ?}
?? ??? ?}
?? ??? ?
?? ??? ?System.out.println(picture);
?? ??? ?
?? ??? ?
?? ??? ?return null;
?? ?}
?
}

總結:圖片上傳均是將圖片的字節(jié)數(shù)據,以HTTP協(xié)議(其他編程語言自行定義傳輸協(xié)議) 進行數(shù)據的傳輸,當服務器接收到后,解析HTTP協(xié)議的圖片數(shù)據并封裝成Request請求對象,最后通過請求對象便可獲取封裝好的文件對象。(注:當項目配置SpringMVC的文件上傳解析器后,可以在請求方法的參數(shù)中傳入Multipart類型變量或解析Request對象。)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java?Stream?API?使代碼更出色的操作完全攻略

    Java?Stream?API?使代碼更出色的操作完全攻略

    這篇文章主要介紹了Java?Stream?API?使代碼更出色的操作完全攻略,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • java 定時同步數(shù)據的任務優(yōu)化

    java 定時同步數(shù)據的任務優(yōu)化

    這篇文章主要介紹了java 定時同步數(shù)據的任務優(yōu)化,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • java音頻播放示例分享(java如何播放音頻)

    java音頻播放示例分享(java如何播放音頻)

    java如何播放音頻?下面的代碼就介紹了java音頻播放示例,需要的朋友可以參考下
    2014-04-04
  • 使用hutool工具進行導入導出excel表格

    使用hutool工具進行導入導出excel表格

    如何在后臺添加導入導出表格的功能呢,本期的文章將會帶領小伙伴們一起實現(xiàn)此功能,文中有詳細的代碼示例和圖文介紹,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2023-10-10
  • Java中byte[]、String、Hex字符串等轉換的方法

    Java中byte[]、String、Hex字符串等轉換的方法

    這篇文章主要介紹了Java中byte[]、String、Hex字符串等轉換的方法,代碼很簡單,需要的朋友可以參考下
    2018-05-05
  • break在scala和java中的區(qū)別解析

    break在scala和java中的區(qū)別解析

    這篇文章主要介紹了break在scala和java中的區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java Math.round函數(shù)詳解

    Java Math.round函數(shù)詳解

    這篇文章主要介紹了Java Math.round函數(shù)詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • Java?報錯?java.util.ConcurrentModificationException:?null?的原因及解決方案

    Java?報錯?java.util.ConcurrentModificationException:?null?

    這篇文章主要介紹了Java?報錯?java.util.ConcurrentModificationException:?null?的原因和解決方案,這個異常通常在多線程環(huán)境下出現(xiàn),意味著在迭代過程中,集合或者映射的結構發(fā)生了變化,本文分享完美解決方案,需要的朋友可以參考下
    2023-07-07
  • Spring Bean初始化及銷毀多種實現(xiàn)方式

    Spring Bean初始化及銷毀多種實現(xiàn)方式

    這篇文章主要介紹了Spring Bean初始化及銷毀多種實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Java雙重檢查加鎖單例模式的詳解

    Java雙重檢查加鎖單例模式的詳解

    今天小編就為大家分享一篇關于Java雙重檢查加鎖單例模式的詳解,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03

最新評論