Saya menggunakan asp.net mvc 4 webapi beta untuk membangun layanan lainnya. Saya harus dapat menerima gambar / file POST dari aplikasi klien. Apakah ini mungkin menggunakan webapi? Di bawah ini adalah tindakan yang saya gunakan saat ini. Adakah yang tahu contoh bagaimana ini seharusnya bekerja?
[HttpPost]
public string ProfileImagePost(HttpPostedFile profileImage)
{
string[] extensions = { ".jpg", ".jpeg", ".gif", ".bmp", ".png" };
if (!extensions.Any(x => x.Equals(Path.GetExtension(profileImage.FileName.ToLower()), StringComparison.OrdinalIgnoreCase)))
{
throw new HttpResponseException("Invalid file type.", HttpStatusCode.BadRequest);
}
// Other code goes here
return "/path/to/image.png";
}
c#
asp.net-mvc-4
Phil
sumber
sumber
Request.Files
Jawaban:
lihat http://www.asp.net/web-api/overview/formats-and-model-binding/html-forms-and-multipart-mime#multipartmime , meskipun saya pikir artikel ini membuatnya tampak sedikit lebih rumit daripada memang benar.
Pada dasarnya,
sumber
MultipartFormDataStreamProvider
tidak mengeksposBodyPartFileNames
properti lagi, sayaFileData.First().LocalFileName
malah menggunakannya .Saya terkejut bahwa banyak dari Anda tampaknya ingin menyimpan file di server. Solusi untuk menyimpan semuanya dalam memori adalah sebagai berikut:
sumber
File.WriteAllBytes(filename, buffer);
untuk menulisnya ke fileLihat kode di bawah, diadaptasi dari artikel ini , yang menunjukkan contoh kode paling sederhana yang bisa saya temukan. Ini mencakup unggahan file dan memori (lebih cepat).
sumber
Cara ASP.NET Core sekarang ada di sini :
sumber
Ini adalah solusi cepat dan kotor yang mengambil konten file yang diunggah dari tubuh HTTP dan menulisnya ke file. Saya menyertakan cuplikan HTML / JS "telanjang tulang" untuk unggahan file.
Metode API Web:
Unggah File HTML:
sumber
Saya menggunakan jawaban Mike Wasson sebelum saya memperbarui semua NuGets di proyek webapi mvc4 saya. Setelah melakukannya, saya harus menulis ulang tindakan unggah file:
Rupanya BodyPartFileNames tidak lagi tersedia dalam MultipartFormDataStreamProvider.
sumber
ReadAsMultipartAsync
dan ii) MasukFile.Move
? 2) Bisakah kamu melakukannyaasync File.Move
?Menuju arah yang sama ini, saya memposting snipet klien dan server yang mengirim File Excel menggunakan WebApi, c # 4:
Dan pengontrol webapi server:
Dan Custom MyMultipartFormDataStreamProvider, diperlukan untuk menyesuaikan Nama File:
PS: Saya mengambil kode ini dari posting lain http://www.codeguru.com/csharp/.net/uploading-files-asynchronously-using-asp.net-web-api .htm
sumber
static method SetFile
di Controller Anda?path
penyimpanan cloud.sumber
Berikut adalah dua cara untuk menerima file. Satu menggunakan penyedia memori MultipartMemoryStreamProvider dan satu menggunakan MultipartFormDataStreamProvider yang menyimpan ke disk. Catatan, ini hanya untuk satu file unggahan sekaligus. Anda dapat dengan pasti memperpanjang ini untuk menyimpan banyak file. Pendekatan kedua dapat mendukung file besar. Saya sudah menguji file lebih dari 200MB dan berfungsi dengan baik. Menggunakan dalam pendekatan memori tidak mengharuskan Anda untuk menyimpan ke disk, tetapi akan membuang pengecualian memori jika Anda melebihi batas tertentu.
sumber
Saya memiliki masalah serupa untuk API Web pratinjau. Belum port bagian itu ke API Web MVC 4 baru, tapi mungkin ini membantu:
Unggah file REST dengan HttpRequestMessage atau Stream?
Tolong beri tahu saya, bisa duduk besok dan mencoba menerapkannya lagi.
sumber
Pertanyaan ini memiliki banyak jawaban bagus bahkan untuk .Net Core. Saya menggunakan kedua Kerangka sampel kode yang disediakan berfungsi dengan baik. Jadi saya tidak akan mengulanginya. Dalam kasus saya yang penting adalah bagaimana menggunakan tindakan unggah File dengan Swagger seperti ini:
Inilah rekap saya:
ASP .Net WebAPI 2
.NET Core
sumber
Pengontrol API:
sumber
Melengkapi jawaban Matt Frear - Ini akan menjadi alternatif ASP NET Core untuk membaca file langsung dari Stream, tanpa menyimpan & membacanya dari disk:
sumber