Я работаю над приложением, имеющим веб-компонент Winforms и MVC3.Мы должны иметь возможность загружать большие файлы с рабочего стола в Интернет.Я пробовал различные варианты VB 2010 WebClient и FTP FileUpload, но продолжаю сталкиваться с проблемами прав доступа, даже несмотря на то, что предоставленный мной идентификатор пользователя и пароль те же, что и в приложении FTP, которое успешно копирует файлы на тот же сайт MVC3.
В своих попытках найти альтернативные решения я рассмотрел использование WCF, которое также кажется сложным и проблематичным для данного конкретного приложения.
Наиболее близкое решение, которое я нашел, использует HttpWebRequest на Winformsприложение.Следующий код VB 2010 и C # (MVC3) успешно передает данные Filename и File в MVC3 (InputStream содержит ссылки и данные UrlEncode, но класс, содержащий поля для этих данных, равен нулю. (Я также передал только данные файла).без имени файла и загруженный файл успешно создается из InputStream - но переменная метода все еще равна нулю.) Хотя я мог бы выделить InputStream, я бы предпочел более элегантную альтернативу.
VB 2010 Winforms метод:
Public Shared Sub FileUpload(ByVal Filepath As String)
Try
Dim Host = System.Configuration.ConfigurationManager.AppSettings("Host")
Dim url As String = Path.Combine(Host, "UI/FileUpload")
Dim request As HttpWebRequest = HttpWebRequest.Create(url)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
Dim Filename As String = Path.GetFileName(Filepath)
Dim FileData As Byte() = GetFile2UploadData(Filepath)
Dim data As String = String.Format("FileName={0}&FileData={1}", System.Web.HttpUtility.UrlEncode(Filename), System.Web.HttpUtility.UrlEncode(FileData))
request.ContentLength = data.Length
Using sr As StreamWriter = New StreamWriter(request.GetRequestStream)
sr.Write(data)
End Using
Dim resp As HttpWebResponse = request.GetResponse
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
Return
End Sub
MVC3 C # Метод и класс контроллера:
[HttpPost]
public ActionResult FileUpload(FileInformation fi)
{
try
{
using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/Users/User1"), fi.FileName), FileMode.Create)) {
fs.Write(fi.FileData,0,fi.FileData.Length);
}
return Content("OK");
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
public class FileInformation
{
public string FileName;
public byte[] FileData;
}
Я уже несколько дней жую эту проблему. Ваши острые идеи приветствуются.
ТИА