1. 간략한 설명
첫 번째: 브라우저 업로드 이미지 구현
두 번째, 이미지 업로드 기능 구현
1. 프로세스 H5 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请求发送请求,
*
* @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{
/*
* 注意:传入参数时,文件的注解@ReuqestParam("variable") -->variable指:前端的h6的控件的name值.
*
* 文件处理功能: 1.将获取的字节数组转化为文件对象,并保存在本地目录中;
*
* 文件处理思路: 1.将获取的(source)file对象,通过函数获取字节数组;
* 2.实例化文件对象和文件输出流;
* 3.将字节数组写入文件即可.
*
* 功能难度: 简单.
*/
//1.变量声明
Map<String,Object> result = null;// 返回结果变量
FileOutputStream fos = null; //写入文件的变量
File destFile = null; //写入的目的地文件(distination)
try {
result = new HashMap<String,Object>();
//2.参数验证
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 实例化目标文件,根据当前的操作系统,指定目录文件,
destFile = new File("D:"+File.separator+"descFolder"+File.separator+"descFile."+ext);
//3.3 实例化流
fos = new FileOutputStream(destFile);
//3.4 获取写入的字节数组,并写入文件
byte[] srcBytes = srcFile.getBytes();
fos.write(srcBytes);
fos.flush();
//4.对输入、输出流进行统一管理
//已在文件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{
//关闭系统资源,避免占用资源.
if(fos != null){
fos.close();
}
}
}
}
2. WeChat 또는 모바일 앱에 이미지 파일을 업로드하려면: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; /** * 微信上传图片业务 * * @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 ); // (备注:下列代码为内部业务代码,可根据公司自身的需求,进行更改) map.put("code", "S"); map.put( "msg", "服务调用成功"); map.put("statusCode", 200); map.put("data", filePath); }else{ throw new RuntimeException("上传图片异常或空图片!"); } } catch (IOException e) { e.printStackTrace(); map.put("code", "F"); map.put("msg", "服务调用失败"); map.put("statusCode", 500); map.put("data", null); } return map; } /** * 当不知道手机、微信传入前端的参数是什么时, * * 可调用该接口进行判断. * * @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"); //遍历请求得到所有的数据. 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); } //获取所有请求参数 Enumeration enumee = req.getParameterNames(); while(enumee.hasMoreElements()){ System.out.println("enumee:"+enumee.nextElement()); } } System.out.println(picture); return null; } }
위 내용은 Java 서버를 사용하여 이미지 업로드를 처리하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

안전한 시험 브라우저
안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

드림위버 CS6
시각적 웹 개발 도구
