자바 배경 그림 크로스 도 메 인 업로드 기능 구현

도 메 인 을 뛰 어 넘 는 원인
프로젝트 개발 과정 에서 저 희 는 이미지 업로드 작업 을 자주 사용 해 야 합 니 다.전통 적 인 방법 은 프로젝트 가 있 는 디 렉 터 리 에 올 리 는 것 입 니 다.예 를 들 어 프로젝트 의 target 디 렉 터 리 에 올 리 는 것 입 니 다.그러나 프로젝트 가 재 부팅 하 는 과정 에서 target 폴 더 의 내용 이 전부 비 워 집 니 다.이것 은 이런 방식 을 사용 하면 테스트 환경 과 개발 환경 을 의미 합 니 다.매번 프로젝트 를 재 개 하 는 과정 에서 우 리 는 그림 을 잃 어 버 리 는 경우 가 많다.이런 상황 은 때때로 사람 을 골 치 아 프 게 하기 때문에 하나의 이미지 서버 는 프로젝트 의 개발 과 테스트 에 있어 매우 필요 하 다.
크로스 필드 의 실현 원리
이미지 서버 를 사용 하 는 상황 에서 우 리 는 예전 처럼 프론트 인터페이스 에서 그림 을 로 컬 프로젝트 서버 에 업로드 한 다음 에 로 컬 프로젝트 서버 는 이 그림 의 데 이 터 를 원 격 이미지 서버 에 기록 하고 원 격 이미지 서버 에서 그림 의 저장 을 책임 집 니 다.마지막 으로 원 격 이미지 서버 는 저장 경 로 를 되 돌려 줍 니 다.로 컬 서버 에 서 는 이 경 로 를 저장 하고 페이지 에서 보 여줄 때 프론트 데스크 톱 에서 이 그림 경 로 를 보 여주 기만 하면 원 격 이미지 서버 에 대한 호출 을 완료 할 수 있 습 니 다.
로 컬 서버 원본 코드

@ResponseBody
 @RequestMapping(value="/imgUpLoadNewOneKuaYu")
 public String imgUpLoadNewOneKuaYu(HttpServletRequest request) throws IOException {
   String urlStr = "http://localhost:9080/no-js/admin/upload";
   Map<String, String> textMap = new HashMap<String, String>(); 
   MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;//    *
   //  request        
    Iterator<String> iter = multiRequest.getFileNames(); 
    Map<String, InputStream> fileMap = new HashMap<String, InputStream>();
    if(iter.hasNext()){ 
     //       
     MultipartFile file = multiRequest.getFile(iter.next()); 
     if(file != null){ 
      //              
      String myFileName = file.getOriginalFilename();
      InputStream fileInputStream=file.getInputStream(); 
      fileMap.put(myFileName, fileInputStream); 
     }
    }
   String ret = FileUpLoadNew.formUpload(urlStr, textMap, fileMap);
   System.out.println(ret);
   return ret;
 }
FileUpLoadNew

package net.sahv.bdyz.util;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Iterator;
import java.util.Map;

public class FileUpLoadNew {

 /**
  * @param urlStr
  * @param textMap
  * @param fileMap
  * @return
  */
 public static String formUpload(String urlStr, Map<String, String> textMap, Map<String, InputStream> fileMap) {
  String res = "";
  HttpURLConnection conn = null;
  String BOUNDARY = "---------------------------123821742118716"; //boundary  request            
  try {
   URL url = new URL(urlStr);
   conn = (HttpURLConnection) url.openConnection();
   conn.setConnectTimeout(5000);
   conn.setReadTimeout(30000);
   conn.setDoOutput(true);
   conn.setDoInput(true);
   conn.setUseCaches(false);
   conn.setRequestMethod("POST");
   conn.setRequestProperty("Connection", "Keep-Alive");
   conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)");
   conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
   OutputStream out = new DataOutputStream(conn.getOutputStream());
   // textMap:          
   if (textMap != null) {
    StringBuffer strBuf = new StringBuffer();
    Iterator<Map.Entry<String, String>> iter = textMap.entrySet().iterator();
    while (iter.hasNext()) {
     Map.Entry<String, String> entry = iter.next();
     String inputName = (String) entry.getKey();
     String inputValue = (String) entry.getValue();
     if (inputValue == null) {
      continue;
     }
     strBuf.append("\r
").append("--").append(BOUNDARY).append("\r
"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"\r
\r
"); strBuf.append(inputValue); } out.write(strBuf.toString().getBytes()); } //fileMap: if (fileMap != null) { Iterator<Map.Entry<String, InputStream>> iter = fileMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry<String, InputStream> entry = iter.next(); String inputName = (String) entry.getKey(); FileInputStream inputValue = (FileInputStream) entry.getValue(); if (inputValue == null) { continue; } String contentType = "image/png"; StringBuffer strBuf = new StringBuffer(); strBuf.append("\r
").append("--").append(BOUNDARY).append("\r
"); strBuf.append("Content-Disposition: form-data; name=\"" + inputName + "\"; filename=\"" + inputName + "\"\r
"); strBuf.append("Content-Type:" + contentType + "\r
\r
"); out.write(strBuf.toString().getBytes()); DataInputStream in = new DataInputStream(inputValue); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); } } byte[] endData = ("\r
--" + BOUNDARY + "--\r
").getBytes(); out.write(endData); out.flush(); out.close(); // StringBuffer strBuf = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { strBuf.append(line).append("
"); } res = strBuf.toString(); reader.close(); reader = null; } catch (Exception e) { System.out.println(" POST 。" + urlStr); e.printStackTrace(); } finally { // if (conn != null) { conn.disconnect(); conn = null; } } return res; } }
이미지 서버 원본 코드

package com.lyc.noJs.controller;

import com.google.common.base.Splitter;
import com.lyc.noJs.util.ImgMD5Util;
import lombok.extern.slf4j.Slf4j;
import org.joda.time.DateTime;
import org.springframework.stereotype.Controller;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.*;
import java.security.NoSuchAlgorithmException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

@Controller
@RequestMapping("/admin")
@Slf4j
public class UploadController {

 @ResponseBody
 @RequestMapping(value = "/upload",method= RequestMethod.POST)
 public String upload(MultipartHttpServletRequest multiRequest) throws UnsupportedEncodingException {
  //        
  //TODO
  //         target  ,      ,          。
  String uploadFilePath = multiRequest.getServletContext().getRealPath("/upload/");
  //         
  String datePath = getDateFolderName() + "\\";
  //    
  String imagePath = saveImage(multiRequest,uploadFilePath,datePath);
  log.info(imagePath);
  return imagePath;
 }

 /**
  *     
  * @param multiRequest
  * @param uploadFilePath
  * @param datePath
  * @return
  * @throws UnsupportedEncodingException
  */
 public String saveImage(MultipartHttpServletRequest multiRequest,String uploadFilePath,String datePath) throws UnsupportedEncodingException {
  String imageNameHead = createImageNameHead();
  String imageName = "";
  //        utf-8  ,        
  multiRequest.setCharacterEncoding("utf-8");
  MultiValueMap<String, MultipartFile> multiFileMap = multiRequest.getMultiFileMap();
  Set<Map.Entry<String, List<MultipartFile>>> set = multiFileMap.entrySet();
  Iterator<Map.Entry<String, List<MultipartFile>>> iterator = set.iterator();
  while(iterator.hasNext()){
   Map.Entry<String, List<MultipartFile>> entry = iterator.next();
   String imageNameEnd = getImageNameEnd(entry);
   imageName = imageNameHead + "." + imageNameEnd;
   List<MultipartFile> multipartFileList = entry.getValue();
   MultipartFile multipartFile = multipartFileList.get(0);
   //        
   String imagePath = uploadFilePath + datePath;
   //         ,   null
   if(makeParentFolder(imagePath)){  //         ,   false,    true
    //       
    String imgFile = imagePath + imageName;
    //        ,   null
    if(!makeImage(multipartFile,imgFile)){ //        ,  false,    true
     return null;
    }
   } else {
    return null;
   }
  }
  return datePath + imageName;
 }

 /**
  *     
  * @param multipartFile
  * @param imgFile
  * @return
  */
 public boolean makeImage(MultipartFile multipartFile,String imgFile){
  File tempFile = new File(imgFile);
  if(tempFile != null){
   //        ,     
   if(!tempFile.exists()){
    try {
     log.info("1");
     multipartFile.transferTo(tempFile);
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   return true;
  }
  return false;
 }

 /**
  *        
  * @param imagePath
  * @return
  */
 public boolean makeParentFolder(String imagePath){
  File parentFile = new File(imagePath);
  if(parentFile != null){
   while (!parentFile.exists()){
    //            
    parentFile.mkdirs();
   }
   return true;
  }
  return false;
 }

 /**
  *        
  */
 public String getDateFolderName(){
  DateTime dataTime = new DateTime();
  String currentDate = dataTime.toString("yyyy\\MM\\dd");
  return currentDate;
 }

 /**
  *           
  * @return
  */
 public String createImageNameHead(){
  DateTime dataTime = new DateTime();
  return String.valueOf(dataTime.getMillis());
 }
}
테스트
로 컬 서버
예 를 들 어 로 컬 에서 한 번 에 여러 장의 그림 을 업로드 하 는 것 은 다음 과 같다.

업로드 단 추 를 누 르 면 페이지 에 결과 가 표 시 됩 니 다.

로 컬 그림 서버 배경 인쇄 결과:
2018\04\09\1523257444813.jpg
2018\04\09\1523257444944.jpg
2018\04\09\1523257445078.jpg
2018\04\09\1523257445202.jpg
2018\04\09\1523257445360.jpg
2018\04\09\1523257445484.jpg
2018\04\09\1523257445593.jpg
2018\04\09\1523257445742.jpg
그림 접근 경로=서버 주소+리 턴 된 그림 상대 주소
아래 주소:
http://localhost:9080/no-js/upload/2018/04/09/1523257444813.jpg
표 시 된 결 과 는 다음 과 같 습 니 다.

총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.

좋은 웹페이지 즐겨찾기