Этот вопрос был о "File transfer to WEBDAV http URL using or POST or PUT method
"
Выше приведен образец POST method
. Аналогичным образом можно по PUT method
, что мало отличается от метода POST.
Question 1 : Shouldn't the url should be like "http://your.server.com/upload.aspx" instead of "http://your.server.com/upload"
Для новичка, такого как я, главная путаница - это URL. Он полностью зависит от того, «как сервер WEBDAV хочет получить метод POST или PUT?»
Я думаю, что для метода POST должна быть одна принимающая страница, которая принимает файл и другие параметры со страницы POSTfile и сохраняет файл на диск.
Я не знаю о коде .net, но WEB API
имеет встроенную функцию, которая может анализировать данные, такие как "multipart/form-data; boundary=---------------------------8d60ff73d4553cc"
Ниже приведен пример кода,
[HttpPost]
public async Task<FileUploadDetails> Post()
{
// file path
var fileuploadPath = HttpContext.Current.Server.MapPath("~/UploadedFiles");
////
var multiFormDataStreamProvider = new MultiFileUploadProvider(fileuploadPath);
// Read the MIME multipart asynchronously
await Request.Content.ReadAsMultipartAsync(multiFormDataStreamProvider);
string uploadingFileName = multiFormDataStreamProvider
.FileData.Select(x => x.LocalFileName).FirstOrDefault();
// Files
//
foreach (MultipartFileData file in multiFormDataStreamProvider.FileData)
{
Debug.WriteLine(file.Headers.ContentDisposition.FileName);
Debug.WriteLine("File path: " + file.LocalFileName);
}
// Form data
//
foreach (var key in multiFormDataStreamProvider.FormData.AllKeys)
{
foreach (var val in multiFormDataStreamProvider.FormData.GetValues(key))
{
Debug.WriteLine(string.Format("{0}: {1}", key, val));
}
}
//Create response
return new FileUploadDetails
{
FilePath = uploadingFileName,
FileName = Path.GetFileName(uploadingFileName),
FileLength = new FileInfo(uploadingFileName).Length,
FileCreatedTime = DateTime.Now.ToLongDateString()
};
return null;
}
Таким образом, URL на странице POSTFile.aspx должен указывать на метод API в этом случае,
"http://your.server.com/api/fileUpload"
где fileUpload - имя контроллера API.
Если вы используете HTTP PUT
метод, то
i) вы хотите получить его в программной форме. Запишите метод PUT, аналогичный методу POST в классе API.
ii) вы хотите напрямую сохранить файл в папку, используя метод PUT.
поэтому URL в этом случае может быть,
"http://your.server.com/Imagefolder"
Да, это можно сделать с помощью дополнительной настройки IIS.
Создайте виртуальный каталог в целевой папке, кроме нескольких других вещей.