webapi读取上传的文件流

时间:2023-02-10 03:19:50

逻辑说明

这里未引用System.Web.Mvc。
主要使用MultipartMemoryStreamProvider对象从Request中获取文件流。

var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
var items = provider.Contents.Where(c => c.Headers.ContentDisposition.FileName != null);

这里读取到的是所有带有文件名的http内容。

完整代码

扩展ApiController方法。

public static class ApiExtensions
{
public async static Task<FormFileCollection> ReadFileCollectionAsync(this ApiController apiController)
{
var provider = new MultipartMemoryStreamProvider();
await apiController.Request.Content.ReadAsMultipartAsync(provider);
var items = provider.Contents.Where(c => c.Headers.ContentDisposition.FileName != null);
FormFileCollection files = new FormFileCollection();
foreach (var item in items)
{
var disposition = item.Headers.ContentDisposition;
FormFile file = new FormFile(disposition.Name.Trim('"'), disposition.FileName.Trim('"'), item.Headers.ContentType.MediaType, await item.ReadAsStreamAsync(), item.Headers.ContentLength ?? 0);
files.Add(file);
}
return files;
} public static FormFileCollection ReadFileCollection(this ApiController apiController)
{
using (var t = ReadFileCollectionAsync(apiController))
{
t.Wait();
return t.Result;
}
}
}

使用方法:
aaarticlea/png;base64,/9j/4AAQSkZJRgABAAEAeAB4AAD//gAfTEVBRCBUZWNobm9sb2dpZXMgSW5jLiBWMS4wMQD/2wCEAAgFBgcGBQgHBgcJCAgJDBQNDAsLDBgREg4UHRkeHhwZHBsgJC4nICIrIhscKDYoKy8xMzQzHyY4PDgyPC4yMzEBCAkJDAoMFw0NFzEhHCExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMf/EAaIAAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKCwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+foRAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXETIjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5+v/AABEIAPUChQMBEQACEQEDEQH/2gAMAwEAAhEDEQA/APeqACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAI5pordN88qRLnG52CjP40ALDNFOm+CVJF6ZRgR+lAD6ACgAoAKACgAoAKACgAoAKAGrIjOyK6l0xuUHkemaAHUAI7BELMcBRk0AJFIksSyRnKOAVPTIoAdQAHgZPGKAEVgyhlIKnkEHg0ALQAUAIjK6hkYMp6EHIoAWgAoAKACgAoAKAGl0DhCyhyMhc8mgAEiGQxh1LqMlc8gfSgB1ABQBHLNHEYxI2DI21eOpoAkoAKACgAoAKACgAoAq3+pWOnKjahe21ornCmeVUDH2yaAJbW5t7yBZrSeKeJvuvE4ZT+IoAloAhe5hjuorZ3xNKrMi4PIXGefxFAE1AASACScAUBsQW15a3RYWtzDOU+8I5A2PrigzhVhP4JJ+hPQaBQAUAFADJpooE3zyJEmcbnYAfrQAkM8M67oJUlUcZRgR+lAElABQAUAFABQAUAFABQAUART3EFuAbiaOIHpvYLn86AHxukiB42DKeQVOQaAHUAIrK2drA4ODg96AFoAKACgAoAKAEJCgkkADkk0AVhqVgTgXtt/39X/ABoAtUAFABQAUAFABQAUAFAGfrTFFtGVGci5TCrjJ4PrxQBB89s91dyI1r5+xI0UKzlvXA4yaAIpL68hivU3yB4hGyGZU3DJwc7eMUAW7h5YFigNzPLcSsSPLRNxAHOM8AfWgCrFeXkywRCYxubl4mcqpbABPuM/SgAaa9WO/b7a3+iH5f3a/Nxn5uPw4xQBNc3FzHN5s0ssFsVUq8SKyj13ZBP5UAao6cUAFABQAUANkdY42dzhVBJPtQBhWMkkV5DdS28sYumKyO23ac8pjnPbHTvQBYN7cDSbufzP3kczKrYHADYFACLG/wBv1QmeTCovy4XByp46Z4oAbZPc21tprG4LpNtRoyoAAK8Y4z29aAD7Xdf2f/aPn8b/APUbRt27tuM4zn8aAJ43uZp7wtcbYoHKrGEXn5QeSR0oAhMs39m2f2ed47iaNVSONUCk45JBU4A9qAH31zMgkSCe4eS3izIUSPbnGctu/kKAGWpluNXjlad13WiOVULjk8jkdP1oAbY3E80dlbRyCAOjyM6Io6NjAGMD8qAHNd3fliFZgJFuxAZdg+ZSM5x0z/hQBbspJlvri2mmMyoqsrMADznjgAdqAL1ABQAUAFAGbftKurWhgjSR/Lfhn2jt3waAKrXU9ve6hcSwoskdupCq+4dT3wKAJYbm8h/e3XnfZvLLO8gj+U9ioU5I+tADY725huMSGd0MDyATKgOR6bf60ANYXDjTJ5rkyebKrFNqgAlSeMDP55oAWK71G4LTW8crASlQmIwm0HBySd2aAJ7Zr2c3brcD91I6Rx7Rg46ZOM0AO0yaQymK5mn88JkxSooHuVKjkfjQBo0AFABQAUAYWvNdJrmkmxhhmlxN8s0pjXG1e4Vv5UAZsV1cWT6hEipa391fQpJsAeOHeoAZTxu4U8kDnt6gFjUNSv8ARRfQNdNfNHaieKWZFDIS+zDbAoI5B6DoaACazvodfsY31SS4kktLjZJJHGGjf5OQFUDHsQfqaALGm6tc6jcabCjeW6xvJegAHBU7Nntl8nj+7QBH8QvtP/CNyfZd23zF87b/AHOc/rikzy815/q75Pn6HB+DvtP/AAkll9k3bvMG/H9z+LP4ZpI+ewHP9Yhyd/w6nr9UfahQAUAFAGfrTFI7VlQuRcphVxk/nQBWnFzbpf36R/ZSY1CKdpJIP3jjI70APupryB7aATSyyTklmRUBAA6LnA/PNAE1rcXkUJ+1Ws0rbyFK7NxXsThsflQA2CW5kubt2nIit3wsaqMt8oOCcfyoAr2V1qMiwXOyV43+Z1IjCBf9nB3ce9AAlzefY7S7N1/r5VDR7F2gE9Bxn9aAJftk4s9Sk8z5oJHEZwPlAAxQAyW6vZrmSG384eVGh/diPliM5O49PpQAs899Hskumlt4vLBYwqrhW77sgnH0oAfYI7avesLmRlHlnGFwwKn2/lQBNe2032xLu3WKVlQoY5OMjOeD2NAFeG7e9mghtHNpGYjI2FUtkNt2jOR1oAkU3cmpPbi7ZY4o0YkIu5ic+3tQBWjnnzHHDIsPm3ciMVRegz7dfegCPU5Lj7Ne20lw7+S8ZD7VBIY9Dxj8sUAbsSNGgVpGkI/ibGT+QAoAdQAUAFABQBmxov8Ab8w2jH2de3+0aAK8V3qNwWmt45WAlKhMRhNoODkk7s0ATGa5jvCt3PNCryYjKIhjI7DOCQfrQBX09bwaSz200kkhlb5SE4G85I46/XigDR02bzY3BmlkdGwyzIFZPYgAUAW6ACgAoAKAI5YY5tnmLny2DrzjBHegAuLeK5i8uZdy5B6kEEdwR0oAgGm2gWRfKJ83G8l2JbByMknNAEtzaQ3JQyq25M7WVypH4gg0AMhsLWHYIotvluXXk8MRgmgBxs4Cs6mPi4/1nJ+bjH4UANlsLeU/vBIyjA2ea23j/ZzigCz0oAKACgAoAZPCk8LRSjcjjBGSM0AJNBFND5Uq5TjjOOnTpQBXk0uzkZy8RIc7mXewUn1xnGfegCV7OB52mKsHZdrYdgGHuAcGgBfssOyFNnywEGMZPy4GBQBH/Z1r5vmeUc7t+3cdu7125xn8KAJkt4k83auPNOX5PJxigCA6bakxkLIhjTYpSV1wvpwaACTTbWRiXjYlgFb943zAdN3PP40AP+w2++JwjK0ShFKuw+Udjg8j60AIdPtjDHF5ZCxElCrsGX6EHNACrZW6RxxrHhY38xeT971J7/jQBIsMazPMq4kcAMc9QOn86AJKACgAoAKAI2hjaZJiv7xAQpz0B6/yoAQ20JlklKAvIoRs8gj0xQBCmm2iKVEbFCpXa0jMoB7AE4FACw6dawyCRIyXC7QzOzHHpyelACR6ZaRujLG2YzlAZGIU+wzgUAKdPtjK0uxlZm3MFkZQT6kA4NAEqW8caSKilRIxZsMQcnqc9qAGwWcMEhkQOXIxueRnOPTJJoAnoAKACgAoAp6jpdrqLRNciYPDnY8M8kLLnryhBoAji0TTo7OW1FvuimbdIZHZ3duxLkliRgYOcjFAC22jWFvDPEsJkFwu2UzyNMzr6FnJJHJ4zQBHBo1jp8n2u2t55riJGWPdO0j4OPlUu2AOBxkCgCLw9p7281/f3Fv9mnv5t5i3BjGoGACRkZ6k44yaANggEEEZB7UAQW1la2hY2ttDAW+95cYXP1xQZwpQp/BFL0J6DQKACgAoAjmhjm2eYu7YwdecYI6GgBZ4Y54WilXcjDBGcUAMuLWG5RVmTIU5UgkFT7EcigB1vAluhWPdgnJ3MWOfqeaACKGOJpGjXBkbc3PU9KAIYtPtopA8SMuCWCiRtoP+7nH6UAVrvS4x5TWsR3LOrld52qM5JAJwPwoAsTaZaTPI0kZPmffAdgrfUA4oAdNYW8rq7IwZV2hkdkOPTIIzQASWFvIoVxIUAC7PNcKQPUZwaAHC0hW489VKyYAO1iAQOmQDg0AJcWUFw++UPuxj5ZGXI/AigBH0+1dI08raIhhCjFCo+oOaAJIbaKFy8akMVCklieB060AU7zTkkltljiPlCZpJMMQQSDz1z19KALC6farBJD5eUlOX3MSWPuSc0ATRRrFGEQtgdNzFj+Z5oAfQAUAFABQBGIIxcNOF/esoUtk9BQBCdPtjK0uxlZm3MFkZQT6kA4NADjYwGYSsJHZW3ANKzKD6gE4oARbC3QOEEiBzuISV1GfbB4/CgCS3torZWESkbjliWLEn3J5oAloAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDif8AhYP/AFC//Jj/AOxrx/7T/ufj/wAA+k/sL/p5+H/BD/hYP/UL/wDJj/7Gj+0/7n4/8AP7C/6efh/wQ/4WD/1C/wDyY/8AsaP7T/ufj/wA/sL/AKefh/wQ/wCFg/8AUL/8mP8A7Gj+0/7n4/8AAD+wv+nn4f8ABD/hYP8A1C//ACY/+xo/tP8Aufj/AMAP7C/6efh/wQ/4WD/1C/8AyY/+xo/tP+5+P/AD+wv+nn4f8EP+Fg/9Qv8A8mP/ALGj+0/7n4/8AP7C/wCnn4f8EP8AhYP/AFC//Jj/AOxo/tP+5+P/AAA/sL/p5+H/AAQ/4WD/ANQv/wAmP/saP7T/ALn4/wDAD+wv+nn4f8EP+Fg/9Qv/AMmP/saP7T/ufj/wA/sL/p5+H/BD/hYP/UL/APJj/wCxo/tP+5+P/AD+wv8Ap5+H/BOvsLj7XY29zt2edGsm3OcZAOM16tOXPBS7nz9Wn7KpKHZtfcT1ZmFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQA7yk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v++jQAeUn+1/30aADyk/2v8Avo0AHlJ/tf8AfRoAPKT/AGv++jQAeUn+1/30aADyk/2v++jQA+gAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoA5zxJqEouPssTlEQDdg4JJ5oAyrO9ns5Q8LkYPK54P1oA7WGQSwpIvR1DD8aAH0AFABQAUAFABQAUAUtYvDY2LSpjeTtXPrQB57e+IGW8YP5kjK2C+/kH2rzauYRpzcLXse3QyedWkqjla+yOz8Mam95EYpWLkKHRj1K16MZKSTR404uEnF7ov6tfvYxQiGETz3EoiiRn2KWIJ5bBwMA9jTJLUJkMKGdFSQgblRtwB9AcDP5CgB9ABQAUAFAFTS777fFM/l+X5U8kON2c7WIz+OKAJrm5hthGZ3CeY6xpx1Y8AUAS0AFABQAUAYfiW/lg2W0DFC43Mw646YoAwILmaCQSRSsrDnIPWgDs9PuPtdnFPjBccgevQ0AWKACgAoAKACgAoAgv7qOxsp7uYExwRtIwHXAGaAGabNdT2wkvbeK3duVSOUyfLjjJKrz7c/WgC1QAUAFABQAUAVNQvvsctmnl7/tU4hzuxt+Vjn3+7QBboAKACgAoARjtUn0GaAKukXv8AaOl2175fl/aI1k2ZztyOmaALdAFTT777ZLeJ5ez7LOYc7s7vlU59vvfpQBboAKAKOtXjWVi0kf32O1T6E96AORaeVpPMaVy/97dzQB1Hh6+kvLZlmO6SIgbvUHpQBqUAFABQAUAFABQAyaQRQvI3RFLH8KAOKvL2e7lLyuTzwueF+lAGr4b1CU3AtZXLowOzJ5BHNAGxq19/Z1kbjy/Mw6Jt3Y+84XP60AWJpBFC8hVmCKW2ouWOOwHc0ALE/mRq4VlDAHDDBH1HagB1ABQAUAFABQAUAFABQAUAFABQAUAFABQBheINKlnl+02y7yRh17/UUAZlno93cShXiaFM/MzjGBQB10aCONUXhVAA+lAHHXmmWdxZ+JrueBZLiCaRoZW5aEiJSCh/hOeeKAJLs6W+qyt4pNuYjbRGzN1jb0O/ZnjfnHTnGKAG2FkNQu9Fh1mFpx9gmLRXAzuG9Nu9T1OMde9AFW9jki0hbaJ4odNg1SWObz4mlijiG7aGUMvyBiO+BxnigDd8HQww2tybTUbK9t3lyi2MeyGHgZVRvb68HqaAN6gAoAoa7aPd6eyRDLoQ4Hrj/wDXQB5veaLK927q6qrMSQ2cg968itl8p1HKL0Z9Hh84hSoqEou6VjtvCNg9vGZmBVAgjTPccc/oK9WEVCKiuh8/Um6k3N9Xcd4rsLO9udHF5aQXA+2BcSxh+CjkjntwPyqiDH1BdLSXVhq4iGqCRhYAj99s2jy/I79f7vfOaANCx0+O98RSNqsSzzQWVs2x+VWTL5bHTII4PagDKv8ATLN9C1G+aEfbBqTBLgEiSMeeBhWHKjBPA9TQBsQWC6f4gubbQ47ex82yR9vlExlw5G4qCuTjjOc0AQ6utuur2Q8VSWklmLZsNKmy3M24dQxIB29Mk98UAZsNxZw6LHaSpaJY3F/c4n1FC0MYDkqGUkZz2yRQBALeyl0KFr+G1ls7TWMbng2RRxHGcKxO1Dkd8YI7UATeJrjT7kXUEaaVD9kth9jD2/myzKU3AwBWXaB0BXPTtQB2umu0mnWzuSzNEhJPc4FAFigAoAyPEGmPeKksHMkYwV9RQBhwaTeyybPs7p6s4wBQB1tnbra20cCHIQYz60AcprHlnWpmjD/2QJE/tTb90yfw/gPl3+2PegDU1+01G40+9IntnhRBNbRxwssiuhDLlt5B5HZR1oA5ye8mMb65b7wNdDWkQwfl6LCf0c/8CoAtX2nKmpSeGYgy2uoLFNleNqIu1/1SMf8AAqAIElmvrS41mcMJ9H8mI8fxRHM2PqCR+FADZBNgZ3/8VRjg/wAPz9Pb9yf/AB2gDe8S2lzJoGrrftZz2YtnMMQtyGQgHBJLEEj2AoAp39rpNneWEOqQWlvoq2rGNJEVbcTEjO4fdzjOM+9AFeG2S7i0qCQSGwfUZhArEjdD5b7R6leuB3XHagC3Loum3GuahBPZQPBb2MIihZBsj5k5VegPHUdKAKmi2Vvb2Xhe+hjC3lywWe45MkoMLkhm6sMgcH0FAGh4iS/i0pZdSnt5UhvbeUtBA0YjjWQFi2WbOBznigChrV/bag+uy2E6zxDSQBNEdyE7pOjDg49qANK80+1099HW0hWPzL5WkYfekby3+Zj1J9zQBg6ZAJdRjN7qum2mrrdkujWpF243n5Q5k+ZCvA+XbjtxQBavNNtH0XXtQeFWvILmd4Z25eEqcjYf4eeeOtAFq7OlN4guf+Em+zY2RfYvteNmMfNs3cbt3XHPSgCnqP8AZw/tc6n5f9t+a/2LP+v24HleT3x0+73zmgCe5GnnVrr/AISjyPP8iL7H53+783lf7e7P3eentQBmsm7TtAW/nsYNO+wD5tRtzLD5vH3hvUBsdCffFAF0xWcMWjprF9bX+jBZj50i7bcvkeWDuJGANwXJPT6UAa3g0W6x6n9i/wCPb7a3l9cbdidM9vTtjGOKAOgoAKAKmqWf22zaEHDdVJ9aAOWbSr5ZNn2aQn1AyPzoA6TQ9PawtiJCPNkOWx0HoKAKfia2ju73RoJwTE90wdQcBh5T8H29R3oAw/E5sPOuNPNvpdp9itwLVJ7bzJZQVJ/cKGXbg8ZXJz6UAJOskkttYOXYa/aweY3+4P3pJ90wKAL/AIUMl1qbi43FtIg+xZPd93J/FVjP40AdVQAUANkQSRsjfdYEH6UAcjeaPd28pVImlTPysgzkUAafh/SpbeX7TcrsIGEXv9TQA7xqFPh2cOHK+ZFkR53Y8xc4xzn6UAYz/wBm/aL/AP4Rz7P9k/s6b7X9lx5fmcbM44343e+OtAFq006z1LWIo7+3juYk0uAiOUbkzubkqeCfQ9qAM83NuNI0/T7/AOwLbF5wtxqSebEuyQqqbSRlsHjJ7d6ADS7dL6y0S2uctAL65TYFaNSgEmF2kkhcY+UnpxQBc1eM6RdTabp8Yhj1iNIrdY1wI5BhGwB0+TDf8BNAHVW0MdtbxwQqFjiUIoHYAYFAElABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUARPbQO+94Y2YfxFQTQBL0oAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDPOnTS6ul7dXCSRW4P2eFItuwkYLMSTuOMgYAwCaANCgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAGbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FAFd5ZFuPLDnGQOgoAsbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAbG/56N+n+FABsb/no36f4UAGxv+ejfp/hQAbG/wCejfp/hQAyffHEWWRsj1A/woAfsb/no36f4UAGxv8Ano36f4UAGxv+ejfp/hQAbG/56N+n+FABsb/no36f4UAGxv8Ano36f4UAGxv+ejfp/hQAbG/56N+n+FABsb/no36f4UAGxv8Ano36f4UAGxv+ejfp/hQAbG/56N+n+FABsb/no36f4UAGxv8Ano36f4UAGxv+ejfp/hQAbG/56N+n+FABsb/no36f4UAGxv8Ano36f4UAGxv+ejfp/hQAbG/56N+n+FABsb/no36f4UAGxv8Ano36f4UAPoAKACgAoAKAKUv/AB+j/eH9KALtABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAEV3/AMe7fh/OgCWgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAKUv/H6P94f0oAy/iHcz2fg7UJ7WaSCZFUq8TFWHzDoRQBy76tf33h7xJqc93dWd7axeVFZrIyG2XAIcgHlm67vwFAFq2s9Zj8Ly38Tara3lr5d1GLvUfPW4VRllwCcKRng98UAbvgiS81Cyl1q+lkB1JvMhtzIWSCIcKAOmT1J96AOioAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgCK7/492/D+dABdwm4tZYRI8ZkQqHRirLkdQR0NAHC6Pq19qkuh6RJczJdWUkrai6yEMwhO0Bj3DEgn1oAp6N4rM3jFLt9RuXtb65ktVtWV/KiQYEbgkbckqc4OfmoA6XwLdXF1pOovczyzOmoXCK0jliqhuAM9h6UAYR1O9Pw40q6W+uDcyXsaPKJW3sPOIIJzk8cYoAf4cOpXni/UZJP7VntrfUJEEi6htgiAHCmInJ/Ad6APQKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoApS/8AH6P94f0oAk1PT7XVLGWyvovNt5QA6biuec9QQe1AFS98OaVeyzS3NrueeD7PKRI674/Q4Iz9etABpvh3TNMtbi2s4HSG4XbIrTyPkYIwNzHHB7UAXbCzg0+yhs7OPy4IECRpknaB0GTzQBPQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAEV3/x7t+H86AJaAM2LQdMhvb68itQlxfrsuJA7AuMY9ePwxQAPoOmPpMGltaj7HblTFGHYbSpypDA56+9AFa08JaLZ6h9utrWSO48wy5FzLt3Hqdu7Hf0oAIfCGgw6kNQi02NbgP5gO5tob+8EztB98UAOh8LaPBqranFbOl20hlZxcSYLHqSu7b+lAGzQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAFSZGF0rkfKWABoAt0AFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUARXf/AB7t+H86AJaACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAK/2OP1b86AD7HH6t+dAB9jj9W/OgA+xx+rfnQAfY4/VvzoArtGEuQik4yOe9AFvyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAPI/6ay/99UAHkf8ATWX/AL6oAPI/6ay/99UAHkf9NZf++qADyP8AprL/AN9UAHkf9NZf++qADyP+msv/AH1QAeR/01l/76oAjuItsLHzJDjsTxQB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" alt="" />

public IHttpActionResult Upload()
{
var dir = "/upload/file";
var dirPath = HostingEnvironment.MapPath(dir);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
var files = this.ReadFileCollection();
var fileA = files["filea"];
fileA.SaveAs(Path.Combine(dirPath, fileA.FileName));
var fileD = files["filed"];
fileD.SaveAs(Path.Combine(dirPath, fileD.FileName));
return Ok();
}

FormFile类:

public class FormFile
{
public FormFile(string name, string fileName, string contentType, Stream stream, long size)
{
this.Name = name;
this.FileName = fileName;
this.ContentType = contentType;
this.Stream = stream;
this.Size = size;
} public string Name { get; private set; }
public string FileName { get; private set; }
public string ContentType { get; private set; }
public long Size { get; private set; }
public Stream Stream { get; private set; } public virtual void SaveAs(string filename)
{
using (var fileStream = new FileStream(filename, FileMode.Create))
{
byte[] buffer = new byte[4096];
while (true)
{
int num = this.Stream.Read(buffer, 0, buffer.Length);
if (num == 0)
{
break;
}
fileStream.Write(buffer, 0, num);
}
fileStream.Flush();
}
}
}

FormFileCollection类:

public class FormFileCollection : IEnumerable<FormFile>
{
readonly List<FormFile> files = new List<FormFile>();
public int Count => files.Count; public FormFile this[int index]
{
get { return files[index]; }
} public FormFile this[string index]
{
get { return files.Where(f => f.Name == index).FirstOrDefault(); }
} public void Add(FormFile item)
{
files.Add(item);
} public void AddRange(IEnumerable<FormFile> items)
{
files.AddRange(items);
} public IEnumerator<FormFile> GetEnumerator()
{
return files.GetEnumerator();
} IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
}