溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么使用Java服務(wù)器處理圖片上傳

發(fā)布時(shí)間:2022-06-24 09:17:54 來(lái)源:億速云 閱讀:126 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了怎么使用Java服務(wù)器處理圖片上傳的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇怎么使用Java服務(wù)器處理圖片上傳文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

一、簡(jiǎn)述

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

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

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

1.處理H5的單文件上傳實(shí)現(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請(qǐng)求發(fā)送請(qǐng)求,
     * 
     * @param request:請(qǐng)求對(duì)象
     * @param reponse:響應(yīng)對(duì)象
     * @param file:上傳的文件對(duì)象
     * @return JSON串 : {"code":"S","msg":"服務(wù)調(diào)用成功"}
     * @throws IOException 
     */
    @RequestMapping(value = "/doFileUpload",method = RequestMethod.POST)
    @ResponseBody
    public Map<String,Object> doFileUpload(HttpServletRequest request,
            HttpServletResponse reponse,
            @RequestParam("file") MultipartFile srcFile) throws IOException{
        
        /*
         * 注意:傳入?yún)?shù)時(shí),文件的注解@ReuqestParam("variable") -->variable指:前端的h6的控件的name值.
         * 
         * 文件處理功能: 1.將獲取的字節(jié)數(shù)組轉(zhuǎn)化為文件對(duì)象,并保存在本地目錄中;
         * 
         * 文件處理思路: 1.將獲取的(source)file對(duì)象,通過(guò)函數(shù)獲取字節(jié)數(shù)組;
         *                 2.實(shí)例化文件對(duì)象和文件輸出流;
         *                 3.將字節(jié)數(shù)組寫入文件即可.
         * 
         * 功能難度: 簡(jiǎn)單.
         */
        
        //1.變量聲明
        Map<String,Object> result = null;// 返回結(jié)果變量
        FileOutputStream fos = null;     //寫入文件的變量
        File destFile = null;    //寫入的目的地文件(distination)
        
        try {
            result = new HashMap<String,Object>();
            
            //2.參數(shù)驗(yàn)證
            if(srcFile == null){
                throw new RuntimeException("上傳文件不存在");
            }
            if(srcFile.getBytes().length == 0){
                throw new RuntimeException("上傳文件內(nèi)容為空");
            }
            
            //3.操作文件對(duì)象,寫入本地目錄的文件中
            
            //3.1 截取文件后綴
            String ext = srcFile.getOriginalFilename().substring(srcFile.getContentType().lastIndexOf( ".")+1);
            //3.2 實(shí)例化目標(biāo)文件,根據(jù)當(dāng)前的操作系統(tǒng),指定目錄文件,
            destFile = new File("D:"+File.separator+"descFolder"+File.separator+"descFile."+ext);
            //3.3 實(shí)例化流
            fos = new FileOutputStream(destFile);
            //3.4 獲取寫入的字節(jié)數(shù)組,并寫入文件    
            byte[] srcBytes = srcFile.getBytes();
            fos.write(srcBytes);
            fos.flush();
            //4.對(duì)輸入、輸出流進(jìn)行統(tǒng)一管理
            //已在文件finally代碼塊處理
            
            result.put( "code", "S");
            result.put( "msg", "服務(wù)調(diào)用成功");
            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", "服務(wù)調(diào)用失敗");
            result.put( "path", null);
            return result;
        } finally{
            //關(guān)閉系統(tǒng)資源,避免占用資源.
            if(fos != null){
                fos.close();
            }
        }
    }
}

2.微信或手機(jī)APP上傳圖片文件的代碼實(shí)現(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è)務(wù)
 * 
 * @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; /* 文件服務(wù) */
    
    @RequestMapping("/getUploadFilePath")
    @ResponseBody
    public Map<String, Object> doWxUploadFile(HttpServletRequest request, HttpServletResponse response) {
 
        HashMap<String, Object> map = new HashMap<String, Object>();
        
        try {
            
            /*
             * // 注釋:該部分是使用在沒(méi)有使用sprinvMVC的架構(gòu)下的圖片上傳. // 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.將請(qǐng)求轉(zhuǎn)化為操作流的請(qǐng)求對(duì)象.
            MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
            MultipartFile picture = req.getFile("file");
            
            if(picture != null && picture.getBytes().length != 0){
                // 2.將圖片上傳到服務(wù)器
                byte[] bytes = picture.getBytes();
                String ext = picture.getOriginalFilename().substring(
                        picture.getOriginalFilename().lastIndexOf(".") + 1
                        );
                // (備注:下列代碼為內(nèi)部業(yè)務(wù)代碼,可根據(jù)公司自身的需求,進(jìn)行更改)
                
                
                map.put("code", "S");
                map.put( "msg", "服務(wù)調(diào)用成功");
                map.put("statusCode", 200);
                map.put("data", filePath);
            }else{
                throw new RuntimeException("上傳圖片異?;蚩?qǐng)D片!");
            }
        } catch (IOException e) {
            e.printStackTrace();
            map.put("code", "F");
            map.put("msg", "服務(wù)調(diào)用失敗");
            map.put("statusCode", 500);
            map.put("data", null);
        }
        return map;
    }
    
    /**
     * 當(dāng)不知道手機(jī)、微信傳入前端的參數(shù)是什么時(shí),
     * 
     * 可調(diào)用該接口進(jìn)行判斷.
     * 
     * @param request
     * @param response
     * @return
     * @throws IOException
     */
    @RequestMapping(value = "/doUploadFileOfCI" , method = RequestMethod.POST )
    public @ResponseBody Map<String,Object> doUploadFile(
            HttpServletRequest request,//請(qǐng)求對(duì)象
            HttpServletResponse response) throws IOException{//響應(yīng)對(duì)象
        
        System.out.println("doTestMultipartFile:");
        
        MultipartHttpServletRequest req = (MultipartHttpServletRequest) request;
        //此時(shí)說(shuō)明請(qǐng)求對(duì)象是MultipartHttpServletRequest對(duì)象
        MultipartFile picture = req.getFile("UploadedImage");
        
        //遍歷請(qǐng)求得到所有的數(shù)據(jù).
        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);
                }
            }
            
            //獲取請(qǐng)求流
            InputStream is = req.getInputStream();
            System.out.println("InputStream:"+is);
            int length = -1;
            while( (length = is.read()) != -1 ){
                System.err.println("data:"+length);
            }
            
            //獲取所有請(qǐng)求參數(shù)
            Enumeration enumee = req.getParameterNames();
            while(enumee.hasMoreElements()){
                System.out.println("enumee:"+enumee.nextElement());
            }
        }
        
        System.out.println(picture);
        
        
        return null;
    }
 
}

關(guān)于“怎么使用Java服務(wù)器處理圖片上傳”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“怎么使用Java服務(wù)器處理圖片上傳”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI