반응형
Web API를 사용하여 파일을 반환하는 방법은 무엇입니까?
내가 사용하고 ASP.NET 웹 API를 .
API (API가 생성하는)에서 C #으로 PDF를 다운로드하고 싶습니다.
API가 반환하도록 할 수 있습니까 byte[]
? C # 응용 프로그램의 경우 다음을 수행 할 수 있습니다.
byte[] pdf = client.DownloadData("urlToAPI");?
과
File.WriteAllBytes()?
StreamContent가 포함 된 HttpResponseMessage를 내부에 반환하는 것이 좋습니다.
예를 들면 다음과 같습니다.
public HttpResponseMessage GetFile(string id)
{
if (String.IsNullOrEmpty(id))
return Request.CreateResponse(HttpStatusCode.BadRequest);
string fileName;
string localFilePath;
int fileSize;
localFilePath = getFileFromID(id, out fileName, out fileSize);
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(localFilePath, FileMode.Open, FileAccess.Read));
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = fileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return response;
}
patridge의 주석에서 UPD : 다른 사람이 실제 파일 대신 바이트 배열에서 응답을 보내려고 여기에 오면 StreamContent 대신 new ByteArrayContent (someData)를 사용하고 싶을 것입니다 ( 여기 참조 ).
다음 조치를 취했습니다.
[HttpGet]
[Route("api/DownloadPdfFile/{id}")]
public HttpResponseMessage DownloadPdfFile(long id)
{
HttpResponseMessage result = null;
try
{
SQL.File file = db.Files.Where(b => b.ID == id).SingleOrDefault();
if (file == null)
{
result = Request.CreateResponse(HttpStatusCode.Gone);
}
else
{
// sendo file to client
byte[] bytes = Convert.FromBase64String(file.pdfBase64);
result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(bytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = file.name + ".pdf";
}
return result;
}
catch (Exception ex)
{
return Request.CreateResponse(HttpStatusCode.Gone);
}
}
와 예 IHttpActionResult
에서 ApiController
.
[HttpGet]
[Route("file/{id}/")]
public IHttpActionResult GetFileForCustomer(int id)
{
if (id == 0)
return BadRequest();
var file = GetFile(id);
IHttpActionResult response;
HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.OK);
responseMsg.Content = new ByteArrayContent(file.SomeData);
responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
responseMsg.Content.Headers.ContentDisposition.FileName = file.FileName;
responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
response = ResponseMessage(responseMsg);
return response;
}
If you don't want to download the PDF and use a browsers built in PDF viewer instead remove the following two lines:
responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
responseMsg.Content.Headers.ContentDisposition.FileName = file.FileName;
Just a note for .Net Core
: We can use the FileContentResult
and set the contentType to application/octet-stream
if we want to send the raw bytes. Example:
[HttpGet("{id}")]
public IActionResult GetDocumentBytes(int id)
{
byte[] byteArray = GetDocumentByteArray(id);
return new FileContentResult(byteArray, "application/octet-stream");
}
참고URL : https://stackoverflow.com/questions/11125535/how-to-return-a-file-using-web-api
반응형
'Programing' 카테고리의 다른 글
목록을 "올바르게"인쇄하는 방법은 무엇입니까? (0) | 2020.09.18 |
---|---|
한 SQL Server 테이블에서 다른 테이블로 행을 복사하는 방법 (0) | 2020.09.18 |
MongoDB에서 중복 레코드 찾기 (0) | 2020.09.16 |
Perforce 트리에서 추적되지 않은 파일을 찾는 방법은 무엇입니까? (0) | 2020.09.16 |
RESOURCE_LOCAL 또는 JTA와 같은 지속성 단위? (0) | 2020.09.16 |