자바 배경 그림 크로스 도 메 인 업로드 기능 구현
프로젝트 개발 과정 에서 저 희 는 이미지 업로드 작업 을 자주 사용 해 야 합 니 다.전통 적 인 방법 은 프로젝트 가 있 는 디 렉 터 리 에 올 리 는 것 입 니 다.예 를 들 어 프로젝트 의 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
표 시 된 결 과 는 다음 과 같 습 니 다.
총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.