для моего текущего веб-API, я возвращаю файл как байт [], и он работает через следующий код.
[Route("GetReferenceFile")]
[HttpPost]
public HttpResponseMessage GetReferenceFile([FromBody]ReferenceFileMonitorRetrievingRequest request)
{
try
{
var fileName = request.fileName;
//get file path
var filePathWoFileName = _manager.GetReferenceFileForReferenceFileMonitor(request.fileName, request.fileFolderPathWithFileName);
//convert file into bytes array
var dataBytes = File.ReadAllBytes(filePathWoFileName + request.fileName);
//add bytes to memory stream
var dataStream = new MemoryStream(dataBytes);
//send out
HttpResponseMessage httpResponseMessage = Request.CreateResponse(HttpStatusCode.OK);
httpResponseMessage.Content = new StreamContent(dataStream);
httpResponseMessage.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName;
httpResponseMessage.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
return httpResponseMessage;
}
catch (IOException e)
{
logger.Error("Error Message: " + e.Message + " Stack Trace: " + e.StackTrace);
return Request.CreateResponse(HttpStatusCode.InternalServerError, e);
}
catch (Exception ex)
{
logger.Error("Error Message: " + ex.Message + " Stack Trace: " + ex.StackTrace);
return Request.CreateResponse(HttpStatusCode.InternalServerError, ex);
}
Могу ли я спросить, есть ли другой способ отправить файл целиком вместо чтения файла как байта [] и пересылки?потому что я боялся, что чтение как byte [] может немного изменить файл, например: пространство, занимаемое «Tab», может не остаться прежним.
Заранее спасибо.
Отредактировано:
Я использовал System.Text.Encoding.UTF8.GetString (// байтовый массив) для преобразования байтового массива в строку и записи в файл.вызовет ли это какую-либо озабоченность по поводу изменения исходного содержимого файла?Спасибо.
public async Task<string> GetReferenceFile(ReferenceFileRequest referenceFileRequest)
{
ConfigurationManager.RefreshSection("appSettings");
var URL = ConfigurationManager.AppSettings["GetReferenceFile"];
byte[] refFile = new byte[0];
try
{
Client.DefaultRequestHeaders.Accept.Clear();
Client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = await Client.PostAsJsonAsync(URL, referenceFileRequest);
refFile = await response.Content.ReadAsByteArrayAsync();
return System.Text.Encoding.UTF8.GetString(refFile); //Convert to string
}
catch (Exception ex)
{
logData.LogError("Error Message: " + ex.Message + " Stack Trace: " + ex.StackTrace);
return null;
}
}