반응형
Restsharp를 사용하여 파일을 다운로드하는 방법
브라우저를 누르면 xml 응답이 반환되는 URL(클라이언트의 라이브 피드 URL)이 있습니다.텍스트 파일에 저장해 두었습니다. 크기는 8MB입니다.
이제 제 문제는 이 응답을 서버 드라이브의 xml 파일에 저장해야 한다는 것입니다. 거기서 데이터베이스에 삽입하겠습니다.그리고 요청은 c#.net 4.5의 http-client 또는 rest-flash 라이브러리를 사용하여 코드를 사용하여 이루어져야 합니다.
위의 경우 어떻게 해야 할지 잘 모르겠습니다.누가 나에게 무언가를 제안해 줄 수 있습니까?
RestSharp를 사용하면 바로 읽을 수 있습니다.
var client = new RestClient("http://example.com");
client.DownloadData(request).SaveAs(path);
와 함께HttpClient
조금 더 관련이 있습니다.이 블로그 게시물을 보세요.
다른 옵션은 Flurl입니다.Http(거부자:제가 저자입니다.그것은 사용합니다.HttpClient
다음과 같은 다양한 편리한 도우미 방법과 유창한 인터페이스를 제공합니다.
await "http://example.com".DownloadFileAsync(folderPath, "foo.xml");
NuGet에 올려보세요.
SaveAs가 중단된 것 같습니다.해보세요.
var client = new RestClient("http://example.com")
byte[] response = client.DownloadData(request);
File.WriteAllBytes(SAVE_PATH, response);
비동기 버전을 원하는 경우
var request = new RestRequest("/resource/5", Method.GET);
var client = new RestClient("http://example.com");
var response = await client.ExecuteTaskAsync(request);
if (response.StatusCode != HttpStatusCode.OK)
throw new Exception($"Unable to download file");
response.RawBytes.SaveAs(path);
읽는 동안 파일을 메모리에 저장하지 마십시오.디스크에 직접 기록합니다.
var tempFile = Path.GetTempFileName();
using var writer = File.OpenWrite(tempFile);
var client = new RestClient(baseUrl);
var request = new RestRequest("Assets/LargeFile.7z");
request.ResponseWriter = responseStream =>
{
using (responseStream)
{
responseStream.CopyTo(writer);
}
};
var response = client.DownloadData(request);
여기 https://stackoverflow.com/a/59720610/179017 에서 복사했습니다.
다음 NuGet 패키지를 현재 시스템에 추가합니다.
닷넷 추가 패키지 RestSharp
베어러 인증 사용
// Download file from 3rd party API
[HttpGet("[action]")]
public async Task<IActionResult> Download([FromQuery] string fileUri)
{
// Using rest sharp
RestClient client = new RestClient(fileUri);
client.ClearHandlers();
client.AddHandler("*", () => { return new JsonDeserializer(); });
RestRequest request = new RestRequest(Method.GET);
request.AddParameter("Authorization", string.Format("Bearer " + accessToken),
ParameterType.HttpHeader);
IRestResponse response = await client.ExecuteTaskAsync(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// Read bytes
byte[] fileBytes = response.RawBytes;
var headervalue = response.Headers.FirstOrDefault(x => x.Name == "Content-Disposition")?.Value;
string contentDispositionString = Convert.ToString(headervalue);
ContentDisposition contentDisposition = new ContentDisposition(contentDispositionString);
string fileName = contentDisposition.FileName;
// you can write a own logic for download file on SFTP,Local local system location
//
// If you to return file object then you can use below code
return File(fileBytes, "application/octet-stream", fileName);
}
}
기본 인증 사용
// Download file from 3rd party API
[HttpGet("[action]")]
public async Task<IActionResult> Download([FromQuery] string fileUri)
{
RestClient client = new RestClient(fileUri)
{
Authenticator = new HttpBasicAuthenticator("your user name", "your password")
};
client.ClearHandlers();
client.AddHandler("*", () => { return new JsonDeserializer(); });
RestRequest request = new RestRequest(Method.GET);
IRestResponse response = await client.ExecuteTaskAsync(request);
if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
// Read bytes
byte[] fileBytes = response.RawBytes;
var headervalue = response.Headers.FirstOrDefault(x => x.Name == "Content-Disposition")?.Value;
string contentDispositionString = Convert.ToString(headervalue);
ContentDisposition contentDisposition = new ContentDisposition(contentDispositionString);
string fileName = contentDisposition.FileName;
// you can write a own logic for download file on SFTP,Local local system location
//
// If you to return file object then you can use below code
return File(fileBytes, "application/octet-stream", fileName);
}
}
언급URL : https://stackoverflow.com/questions/29123291/how-to-use-restsharp-to-download-file
반응형
'programing' 카테고리의 다른 글
Javascript/jQuery의 배열에서 여러 요소 제거 (0) | 2023.08.19 |
---|---|
파일 또는 어셈블리 시스템을 로드할 수 없습니다.런타임, 버전=4.1.2.0 (0) | 2023.08.19 |
STATICFILES_DIR, STATIC_ROOT 및 MEDIA_ROOT의 차이점 (0) | 2023.08.19 |
AJAX 응답을 기다리는 동안 이미지를 로드하려면 어떻게 해야 합니까? (0) | 2023.08.14 |
동일한 사이트 cookie 속성으로 CSRF 차단 (0) | 2023.08.14 |