파일 업로드 문의드립니다.
c# 으로 메세지방에 파일 업로드 하는 부분을 구현 중에 문의 드립니다.
메세지 방에 파일을 업로드 하기 위해서 대략 아래와 같은 소스를 작성했습니다.
네이버웍스 측에서 업로드 경로를 얻어오는 부분까지는 잘 됩니다.
이후 실제 업로드를 진행하는 과정에서 파라미터를 어떻게 설정해야 하는지 잘 몰라 문의 드립니다.
아래 소스 코드처럼 실행할 경우 서버응답코드(response1.StatusCode)는 0 이고 수신되는 값(response1.Content)은 없습니다.(null)
어떤게 잘못 되었을까요?
apiUrl = $"https://www.worksapis.com/v1.0/bots/{botId}/attachments";
string fileName = Path.GetFileName(fileFullName);
string filePathOnly = Path.GetDirectoryName(fileFullName);
var msg = new FileUploadReq
{
fileName = $"{fileName}",
fileSize = fileSize
};
var body = System.Text.Json.JsonSerializer.Serialize(msg);
var client = new RestClient();
var request = new RestRequest(apiUrl, Method.Post);
request.AddHeader("Authorization", "Bearer " + accessToken);
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", body, ParameterType.RequestBody);
var response = client.Execute(request);
var fileUploadRes = System.Text.Json.JsonSerializer.Deserialize<FileUploadRes>(response.Content);
string uploadUrl = fileUploadRes.uploadUrl; // 파일 업로드 경로
//-------------------------------------------------------------------------------------------------
string boundary = Guid.NewGuid().ToString();
byte[] fileBytes;
using (FileStream fs = File.Open(fileFullName, FileMode.Open))
{
fileBytes = new BinaryReader(fs).ReadBytes((int)fs.Length);
}
// 실제 업로드 진행
var request1 = new RestRequest(uploadUrl, Method.Post);
request1.AddHeader("Authorization", $"Bearer {accessToken}");
request1.AddHeader("Content-Length", 223);
request1.AddHeader("Content-Type", $"multipart/form-data; boundary=\"{boundary}\"");
var response1 = client.Execute(request1);
MyDebug("FileUpload2[response1.StatusCode]:" + response1.StatusCode);
MyDebug("FileUpload2[response1.Content]:" + response1.Content);
게시글에 새로운 댓글이 달리면 알림을 전송합니다.
댓글2
업데이트 된 답글입니다.
마인테크 작성자
약간 찜찝하지만 실제 업로드 진행 부분의 소스를 다음처럼 수정해서 업로드에 대한 결과는 잘 회신됩니다.
// 실제 업로드 진행
var webClient = new WebClient();
webClient.Headers.Add("Authorization", $"Bearer {accessToken}");
webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + boundary);
var fileData = webClient.Encoding.GetString(fileBytes);
var package = string.Format("--{0}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n{3}\r\n--{0}--\r\n", boundary, fileName, mimeType, fileData);
var nfile = webClient.Encoding.GetBytes(package);
byte[] resp = webClient.UploadData(uploadUrl, "POST", nfile);
string s = webClient.Encoding.GetString(resp);
var fileUploadCompleteRes = System.Text.Json.JsonSerializer.Deserialize<FileUploadCompleteRes>(s);
string fileId = fileUploadCompleteRes.fileId;
string fileName2 = fileUploadCompleteRes.fileName;
long fileSize2 = fileUploadCompleteRes.fileSize;
2023.01.24
업데이트 된 답글입니다.
bsw2428
아래 가이드를 참고하면 좋을 것 같아요.
https://developers.worksmobile.com/kr/reference/file-upload?lang=ko
2023.01.25
궁금한 점을 해결하지 못하셨나요?
지금 바로 NAVER WORKS 사용자들에게 물어보세요!