Java:客户端需求:把一个图片文件发送到服务端并读取回馈信息。要求判断文件是否存在及格式是否为jpg并要求文件小于2M。(提示可以先进行文件的读取和大小判断,后上传) 服务端需求:接收客户端发送过来的图片数据。进行存储后,回馈一个“上传成功”字样。支持多用户的并发访问。
时间: 2024-11-04 16:12:07 浏览: 4
基于Java语言的Excel文件解析生成JSON及客户端服务端类设计源码
在Java中,实现这个功能需要分为客户端和服务器两个部分:
**客户端部分:**
1. **文件存在性和格式检查:**首先,你需要读取本地的图片文件,比如使用`java.io.File`类获取文件信息。例如:
```java
File file = new File(filePath);
if (!file.exists()) {
System.out.println("文件不存在");
} else if (!file.getName().toLowerCase().endsWith(".jpg")) {
System.out.println("文件格式不是.jpg");
}
else if (file.length() > 2 * 1024 * 1024) { // 文件大于2MB
System.out.println("文件太大,超过2MB");
} else {
// 如果文件存在、格式正确且大小合适,继续上传
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[(int) file.length()];
fis.read(buffer);
fis.close();
// 发送图片数据给服务器
sendDataToServer(buffer);
}
// sendDataToServer方法:
private void sendDataToServer(byte[] data) {
URL url = ...; // 服务端URL
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "image/jpeg");
connection.setDoOutput(true);
try (OutputStream os = connection.getOutputStream()) {
os.write(data);
}
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
System.out.println("文件上传成功,服务器反馈:");
readResponse(connection.getInputStream());
} else {
System.out.println("上传失败,服务器返回码:" + responseCode);
}
}
// readResponse方法用于处理从服务器读取的回馈信息
private void readResponse(InputStream is) {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
StringBuilder responseBuilder = new StringBuilder();
while ((line = reader.readLine()) != null) {
responseBuilder.append(line).append('\n');
}
reader.close();
System.out.println(responseBuilder.toString());
}
```
**服务端部分:**
1. **接收和处理请求:**使用`Servlet`或`Spring Boot`等框架监听HTTP请求。当接收到POST请求时,检查请求体是否包含有效的JPEG图片数据,并限制并发访问。
```java
// 使用Spring MVC示例
@PostMapping("/upload")
public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file) {
if (file.isEmpty() || !file.getOriginalFilename().toLowerCase().endsWith(".jpg")) {
return ResponseEntity.badRequest().body("文件格式错误或为空");
}
if (file.getSize() > 2 * 1024 * 1024) {
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("文件过大");
}
// 存储文件到服务器,这里假设是一个简单的文件系统操作
saveFileToDisk(file);
return ResponseEntity.ok("上传成功");
}
// saveFileToDisk方法将文件保存到服务器磁盘
private void saveFileToDisk(MultipartFile file) {
try {
Path targetPath = Paths.get("uploads/" + file.getOriginalFilename());
Files.copy(file.getInputStream(), targetPath, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
log.error("保存文件出错", e);
}
}
```
阅读全文