NanoHTTPD 如何接收多个文件
时间: 2024-12-18 16:34:26 浏览: 2
在 `NanoHTTPD` 中处理多个文件上传通常涉及到解析 `multipart/form-data` 类型的请求,这通常是通过浏览器发送文件时使用的标准协议。这里有一个基本步骤说明如何接收和处理多个文件:
1. **启用Multipart Support**:
在创建请求处理器时,需要指定服务器能接受 `multipart/form-data` 类型的请求,如 `new FileUploadResource()` 或者自定义一个处理器并添加对应的支持。
```java
class MultiFileUploadHandler extends Resource {
@Override
public Response serve(IHTTPSession session) {
if (session.getMethod().equals(Method.POST)) {
try {
MultipartInput input = new MultipartInput(session.getInputStream());
for (MultipartFile part : input.getFileParts()) {
handleMultiPart(part);
}
return new TextResponse(HttpStatus.SC_OK, "Files uploaded successfully");
} catch (IOException e) {
return new TextResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR, "Error handling file upload", e);
}
} else {
return new TextResponse(HttpStatus.SC_METHOD_NOT_ALLOWED, "Method not allowed");
}
}
private void handleMultiPart(MultipartFile part) throws IOException {
// 这里处理每个单独的文件,例如保存到文件系统或其他地方
byte[] bytes = part.getBytes();
String fileName = part.getName(); // 文件名
saveToFile(bytes, fileName);
}
}
private void saveToFile(byte[] bytes, String fileName) {
FileOutputStream fos = new FileOutputStream(fileName);
fos.write(bytes);
fos.close();
}
```
2. **处理单个文件**:
在 `handleMultiPart` 方法中,你会接收到一个个 `MultipartFile` 对象,包含了文件的内容和名称。对于每一个文件,你需要读取内容(`getBytes()`),然后根据需求存储起来,比如保存到磁盘或数据库。
3. **错误处理**:
当处理过程中发生任何异常(如 `IOException`),记得捕获并返回适当的响应,以便客户端了解发生了错误。
注意,以上示例假设你已经导入了 `nanohttpd.multipart.MultipartFile` 和相关的依赖。在实际项目中,你可能需要使用更成熟的库,如 Apache Commons FileUpload,来简化文件上传的处理过程。
阅读全文