Thực ra nó không phải là nhiệm vụ tầm thường. Nếu bạn muốn viết luồng từ máy khách đến cơ sở dữ liệu, bạn phải xử lý yêu cầu theo cách thủ công. Có một số thư viện, có thể làm cho công việc này đơn giản hơn. Một trong số đó là "Apache Commons FileUpload". Dưới ví dụ rất đơn giản, làm thế nào bạn có thể xử lý yêu cầu multipart/form-data
đến của thư viện này.
@Controller
public class Controller{
@RequestMapping("/upload")
public String upload(HttpServletRequest request){
String boundary = extractBoundary(request);
try {
MultipartStream multipartStream = new MultipartStream(request.getInputStream(),
boundary.getBytes(), 1024, null);
boolean nextPart = multipartStream.skipPreamble();
while(nextPart) {
String header = multipartStream.readHeaders();
if(header.contains("filename")){
//if input is file
OutputStream output = createDbOutputStream();
multipartStream.readBodyData(output);
output.flush();
output.close();
} else {
//if input is not file (text, checkbox etc)
ByteArrayOutputStream output = new ByteArrayOutputStream();
multipartStream.readBodyData(output);
String value = output.toString("utf-8");
//... do something with extracted value
}
nextPart = multipartStream.readBoundary();
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private String extractBoundary(HttpServletRequest request) {
String boundaryHeader = "boundary=";
int i = request.getContentType().indexOf(boundaryHeader)+
boundaryHeader.length();
return request.getContentType().substring(i);
}
}
Tựa đề của lĩnh vực tập tin sẽ trông giống như:
Content-Disposition: form-data; name="fieldName"; filename="fileName.jpg"
Content-Type: image/jpeg
Tựa đề của lĩnh vực di chúc đơn giản trông giống như:
Content-Disposition: form-data; name="fieldName";
Lưu ý, rằng đoạn mã này chỉ được đơn giản hóa ví dụ cho thấy bạn hướng . Không có một số chi tiết như: trích xuất tên trường từ tiêu đề, tạo luồng đầu ra cơ sở dữ liệu, v.v. Bạn có thể tự mình triển khai tất cả các công cụ này. Ví dụ về các tiêu đề trường yêu cầu nhiều phần bạn có thể tìm thấy trong RFC1867. Thông tin về multipart/form-data
RFC2388.
Nguồn
2016-06-17 05:33:40
cơ sở dữ liệu Những gì bạn đang sử dụng? – Songo
Chúng tôi đang sử dụng AWS S3 – McLovin