요구 사항 : 원격 서버에 파일 업로드 및 다운로드 기능 제공
해결 방법 : 사용 아파치, 톰캣 또는 FTP는 파일 서버를 구축합니다.
Apache2, Tomcat 및 FTP 배포에 대한 많은 온라인 자습서가 있습니다. 나는 주로 두 가지 방법으로 나누어 세 가지를 모두 사용했습니다.
예를 들어 ftp는 자바 프로젝트에 접속 한 후 직접 업로드 및 다운로드 할 수 있으며, 인터넷에는이 방법에 대한 많은 튜토리얼이 있습니다.
그리고 Apache2와 Tomcat을 사용하는 경우 직접 업로드 할 수없고 서버에 프로젝트를 배포하여 서버 파일의 작업을 완료 할 수 있습니다.이를 달성하는 방법은 다음과 같습니다. Apache2, Tomcat, FTP에 서비스를 설정 한 후 파일을 저장할 디렉토리를 생성하고 apache2를 사용하여 / var / www /에 파일을 넣고 파일 폴더를 생성했습니다. 그런 다음 두 개의 springboot 프로젝트가 필요합니다. 하나는 서버이고 다른 하나는 클라이언트입니다.
고객:
첫 페이지:
<input id="cert" type="file" onchange="submit()" />
function submit() {
var formData = new FormData();
formData.append('file', $("#cert")[0].files[0]); //生成一对表单属性
console.log(formData)
$.ajax({
type: "POST", //因为是传输文件,所以必须是post
url: '/upload', //对应的后台处理类的地址
data: formData,
processData: false,
contentType: false,
success: function(data) {
}
});
}
클라이언트 백그라운드 인터페이스 :
@ApiOperation(value = "上传图片接口")
@PostMapping(value = "/upload")
public String upload(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "失败";
}
JSONObject postData = new JSONObject();
String fileName = file.getOriginalFilename();//上传的文件名
String suffixName = fileName.substring(fileName.lastIndexOf("."));//获取后缀
fileName = UUID.randomUUID() + suffixName;//生成唯一文件名
try {
byte[] fileBytes = file.getBytes();//转换为byte数组
postData.put("fileName",fileName);
postData.put("data",fileBytes);
RestTemplate client = new RestTemplate();
//FilePath是你服务端的项目接口路径
JSONObject json = client.postForEntity(FilePath, postData, JSONObject.class).getBody();
logger.info("上传成功");
return json.get("data");//返回文件下载地址
} catch (IOException e) {
logger.error(e.toString(), e);
}
logger.info("上传失败");
return "失败";
}
업로드가 성공하면 파일의 다운로드 주소가 반환됩니다.
서버 인터페이스 :
@RestController
@RequestMapping(value = "upload")
@Slf4j
public class API {
/**
* 访问服务器文件路径端口
*/
@Value(value="${filePath}")
private String imgPath;
/**
* 服务器保存文件路径
*/
@Value(value="${uploadHost}")
private String uploadHost;
/**
* 项目host路径
*/
@ApiOperation(value = "上传图片接口", notes = "")
@PostMapping(value = "/upImg")
public JSONObject upImg(@RequestBody String json) {
JSONObject jsonObject =new JSONObject();
byte[] bfile = JSONObject.parseObject(json).getBytes("data");
String fileName =JSONObject.parseObject(json).getString("fileName");
byte2File(bfile,uploadHost,fileName);
if (json.isEmpty()) {
return null;
}
try {
log.info("上传成功");
jsonObject.put("data",imgPath+fileName);
return jsonObject;
} catch (Exception e) {
log.info("上传失败");
jsonObject.put("message",e.toString());
}
return jsonObject;
}
//byte数组转file文件方法
public static void byte2File(byte[] bfile,String filePath,String fileName){
BufferedOutputStream bos=null;
FileOutputStream fos=null;
File file=null;
try{
File dir=new File(filePath);
if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在
dir.mkdirs();
}
file=new File(filePath+fileName);
fos=new FileOutputStream(file);
bos=new BufferedOutputStream(fos);
bos.write(bfile);
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
finally{
try{
if(bos != null){
bos.close();
}
if(fos != null){
fos.close();
}
}
catch(Exception e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
}
서버 구성 파일 application.yml
server:
port: 8099
#访问服务器文件路径端口
filePath: http://你的IP:88/
#服务器保存文件路径
uploadHost: /var/www/file/