Browse Source

Always return Content-MD5 header and JSON field on successful writes

Go always sets Content-MD5 in the response regardless of whether the
request included it. The Rust version was conditionally including it
only when the request provided Content-MD5.
rust-volume-server
Chris Lu 3 days ago
parent
commit
39af0871ec
  1. 11
      seaweed-volume/src/server/handlers.rs

11
seaweed-volume/src/server/handlers.rs

@ -2068,7 +2068,6 @@ pub async fn post_handler(
// Validate Content-MD5 if provided
let content_md5 = content_md5.or(parsed_content_md5);
let has_request_content_md5 = content_md5.is_some();
if let Some(ref expected_md5) = content_md5 {
if expected_md5 != &original_content_md5 {
return json_error_with_query(
@ -2288,13 +2287,13 @@ pub async fn post_handler(
} else {
// H2: Use Content-MD5 computed from original uncompressed data
let content_md5_value = original_content_md5;
// Match Go: only include contentMd5 in response when request provided Content-MD5
// Match Go: always include contentMd5 in response JSON and header
let result = UploadResult {
name: filename.clone(),
size: original_data_size, // H3: use original size, not compressed
etag: n.etag(),
mime: mime_type.clone(),
content_md5: if has_request_content_md5 { Some(content_md5_value.clone()) } else { None },
content_md5: Some(content_md5_value.clone()),
};
let etag = n.etag();
let etag_header = if etag.starts_with('"') {
@ -2305,10 +2304,8 @@ pub async fn post_handler(
let mut resp = (StatusCode::CREATED, axum::Json(result)).into_response();
resp.headers_mut()
.insert(header::ETAG, etag_header.parse().unwrap());
if has_request_content_md5 {
resp.headers_mut()
.insert("Content-MD5", content_md5_value.parse().unwrap());
}
resp.headers_mut()
.insert("Content-MD5", content_md5_value.parse().unwrap());
resp
}
}

Loading…
Cancel
Save