Restsharp: RestRequest.AddFile์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

์— ๋งŒ๋“  2010๋…„ 11์›” 01์ผ  ยท  13์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: restsharp/RestSharp

RestRequest์— ํŒŒ์ผ ์ถ”๊ฐ€๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ResponseStatus๋Š” ์˜ค๋ฅ˜๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.

response.Error ๋ฉ”์‹œ์ง€๋Š” "์ŠคํŠธ๋ฆผ์— ์“ธ ๋ฐ”์ดํŠธ๊ฐ€ ์ง€์ •๋œ ์ฝ˜ํ…์ธ  ๊ธธ์ด ๋ฐ”์ดํŠธ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ•ฉ๋‹ˆ๋‹ค."์ž…๋‹ˆ๋‹ค.

์ŠคํŠธ๋ฆผ์— ์“ฐ๊ธฐ ์ „์— ์ฝ˜ํ…์ธ  ๊ธธ์ด๋ฅผ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ด๊ฒƒ์ด ์ด ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

๋ชจ๋“  13 ๋Œ“๊ธ€

.NET์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Content-Length์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ํŒŒ์ผ๋กœ ํ…Œ์ŠคํŠธ๋˜์ง€ ์•Š์•˜๊ณ  ํ—ค๋”๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •๋˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ๋ณด๊ณ ์„œ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

jonfuller์˜ ์ตœ์‹  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์œผ๋กœ ๋‹ค์‹œ ์‹œ๋„ํ•˜๊ณ  ์—ฌ์ „ํžˆ ์ž‘๋™ํ•˜์ง€ ์•Š์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ์ด๊ฒƒ์ด ํ•ด๊ฒฐ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธํ•˜๊ณ  ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์„ธ์š”.

๋ฌธ์ œ๊ฐ€ ๋ฐ˜ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
~3.5MB ํฌ๊ธฐ์˜ ํŒŒ์ผ์ด ์žˆ๋Š” ๋ฒ„์ „ 105.2.3(ํ˜„์žฌ nuget์—์„œ ์•ˆ์ •).

105.1.0์œผ๋กœ ๋‹ค์šด ๊ทธ๋ ˆ์ด๋“œํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

StackOverflow (๋‚ด ๊ฒƒ์ด ์•„๋‹˜)์— ๋น„์Šทํ•œ

์ด๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฒ„๊ทธ #769 ๋ฐ #742์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ˜ํ…์ธ  ๊ธธ์ด์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฒ”ํ”„ - ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

๋„ค, ์ด๊ฒƒ๋„ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. 105.1.0์œผ๋กœ ๋Œ์•„๊ฐ€๋„ ๋„์›€์ด ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์•„์ง ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

์ตœ์‹  ๋ฒ„์ „์˜ restsharp์—์„œ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์‚ฌ์šฉํ•  ๋•Œ
req.AddFile("ํ˜ธ์ถœ[๊ทธ๋ฆผ_์†์„ฑ][ํŒŒ์ผ]", (s) => imageStream.CopyTo(s), GetRandomFileName("jpg"), "์ด๋ฏธ์ง€/jpeg");

์ตœ์‹  ๋ฒ„์ „์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

ํ•˜์ง€๋งŒ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด
req.AddFile("ํ†ตํ™”[๊ทธ๋ฆผ_์†์„ฑ][ํŒŒ์ผ]", imageStream.GetBytes(), GetRandomFileName("jpg"), "์ด๋ฏธ์ง€/jpeg");

~์™€ ํ•จ๊ป˜

    public static byte[] GetBytes(this Stream s)
    {
        using (var ms = new MemoryStream())
        {
            s.CopyTo(ms);
            return ms.ToArray();
        }
    }

ํšจ๊ณผ๊ฐ€์žˆ๋‹ค.

๊ทธ๋ž˜์„œ imageStream.CopyTo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด byte[]๋ฅผ ๋ณด๋‚ด๋Š” ๋™์•ˆ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ์ด ๋ฒ„๊ทธ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋‚˜์˜ ํ•ด๊ฒฐ์ฑ…์ด์—ˆ์Šต๋‹ˆ๋‹ค.

var req = GetRestRequest("Upload", Method.POST, null);
//req.AddFile("file",
//    (s) => {
//        var stream = input(imageObject);
//        stream.CopyTo(s);
//        stream.Dispose();
//    },
//    fileName, contentType);

req.Files.Add(new FileParameter {
    Name = "file",
    Writer = (s) => {
        var stream = input(imageObject);
        stream.CopyTo(s);
        stream.Dispose();
    },
    FileName = fileName,
    ContentType = contentType,
    ContentLength = contentLength
});   

RestRequest.AddFile์ด .NET Core์— ๋Œ€ํ•ด ์ค€๋น„๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์ธํ„ฐํŽ˜์ด์Šค์˜ AddFile ๋ฉ”์„œ๋“œ ์ฃผ์œ„์— #if FRAMEWORK ์ปดํŒŒ์ผ๋Ÿฌ ์ง€์‹œ๋ฌธ์ด ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. @bcabrera ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋‚ด ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์ ํ•ฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

.NET Core์šฉ ๋ฒ„์ „์€ ์•„์ง ์—†์Šต๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ƒํ™ฉ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋ ค๋ฉด ๋ฏธํ•ด๊ฒฐ ๋ฌธ์ œ๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰