Примечание в ServiceStack вы можете принимать загруженные файлы HTTP через multipart / form-data Content-Type, который является рекомендуемым способом для оптимальной совместимости и производительности.* Пример этого можно сделать в проекте GitHub's Rest Files .Вот пример клиента C #, показывающий, как загрузить файл:
[Test]
public void Can_WebRequest_POST_upload_file_to_save_new_file_and_create_new_Directory()
{
var restClient = CreateRestClient();
var fileToUpload = new FileInfo(FilesRootDir + "TESTUPLOAD.txt");
var response = restClient.PostFile<FilesResponse>("files/UploadedFiles/",
fileToUpload, MimeTypes.GetMimeType(fileToUpload.Name));
Assert.That(Directory.Exists(FilesRootDir + "UploadedFiles"));
Assert.That(File.ReadAllText(FilesRootDir + "UploadedFiles/TESTUPLOAD.txt"),
Is.EqualTo(TestUploadFileContents));
}
Вы можете view-source примера Ajax , чтобы увидеть, как это сделать в JavaScript.
А вот реализация веб-службы для обработки загруженных файлов:
public override object OnPost(Files request)
{
var targetDir = GetPath(request);
var isExistingFile = targetDir.Exists
&& (targetDir.Attributes & FileAttributes.Directory) != FileAttributes.Directory;
if (isExistingFile)
throw new NotSupportedException(
"POST only supports uploading new files. Use PUT to replace contents of an existing file");
if (!Directory.Exists(targetDir.FullName))
{
Directory.CreateDirectory(targetDir.FullName);
}
foreach (var uploadedFile in base.RequestContext.Files)
{
var newFilePath = Path.Combine(targetDir.FullName, uploadedFile.FileName);
uploadedFile.SaveTo(newFilePath);
}
return new FilesResponse();
}
Надеюсь, это поможет!