Page 1 of 1

Die WebHDFS -API erstellt erfolgreich Datei, aber anhängen ist trotz 200 Antwort mit httpclient () offensichtlicher Fehl

Posted: 09 Mar 2025, 13:54
by Anonymous
Ich habe eine WEBHDFS -API, die erfolgreich eine Datei erstellt hat, aber wenn ich versuche, ein Byte -Array von Daten an dieselbe Datei anzuhängen, bin ich in Probleme. Die Header.location mit den Daten, die angehängt werden sollen. Dies weist darauf hin, dass die Anhängefunktion nicht funktioniert und die Datei irgendwie beschädigt wurde. gültig. Webhdfs api.

Code: Select all

uri = _strURI + (strFullFileName + "?op=APPEND&user.name=" + _webHdfsUserName);
method = "POST";

private async Task RunPutBinaryFileRequest(string strURI, string strMethod, byte[] data)
{
bool blnResult = false;

try
{
var handler = new HttpClientHandler
{
AllowAutoRedirect = false,
PreAuthenticate = true,
};
var hClient = new HttpClient(handler);
var request = new HttpRequestMessage
{
Method = new HttpMethod(strMethod), //PUT or POST: PUT = CREATE , POST REQUIRED FOR APPEND, determined by calling function.
RequestUri = new Uri(strURI),
};
hClient.DefaultRequestHeaders.Referrer = new Uri(strURI);
hClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(_webHdfsUserName + ":" + _webHdfsPassword)));

var response = await hClient.SendAsync(request);
//response.EnsureSuccessStatusCode();
blnResult = await UseBinaryHTTP(data, response.Headers.Location, strMethod);
hClient.Dispose();
}
catch (HttpRequestException ex)
{
_logger.LogError("[RunBinaryPutFileRequest]request}::WebException{ex}", ex.Message);
}
return blnResult;
}

private async Task UseBinaryHTTP(byte[] data, Uri url, string strMethod)
{
var success = false;
try
{
var hClient = new HttpClient();
var sContent = new ByteArrayContent(data);
var aValue = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(_webHdfsUserName + ":" + _webHdfsPassword)));
hClient.DefaultRequestHeaders.Authorization = aValue;
var request = new HttpRequestMessage
{
Method = new HttpMethod(strMethod),
RequestUri = url,
Content = sContent
};
request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var response = await hClient.SendAsync(request);

response.EnsureSuccessStatusCode();
hClient.Dispose();
success = true;
}
catch (HttpRequestException ex)
{
_logger.LogError("[UseBinaryHTTP]request}::WebException{ex}", ex.Message);
}
return success;
}