Требуется Upload файл на веб-сервер - C#
Формулировка задачи:
Я работаю с Memsource cloud API.
http://wiki.memsource.com/wiki/Memsource_API
Мне требуется выгрузить файл на веб-сервер.
Примеры допустимых форматов файла: .txt, .doc, .xls.
Для Upload предназначен Url (более подробно см. Method.png): http://cloud1.memsource.com/web/api/v7/job/uploadBilingualFile
, который принимает два обязательных параметра: token (тип string) и bilingualFile (бинарное представление файла, который нужно выгрузить).
Серфинг по интернету привел меня к попытке использовать HttpWebRequest.
ContentType устанавливаю как multipart/form-data, а Method как POST.
Выдается ошибка "400. Bad request".
Подскажите, пожалуйста, что я делаю не так?
var uri = "http://cloud1.memsource.com/web/api/v7/job/uploadBilingualFile";
_request = (HttpWebRequest)WebRequest.Create(uri);
var boundary = "B0unD-Ary";
_request.ContentType = "multipart/form-data; boundary=" + boundary;
_request.Method = "POST";
_request.UserAgent = "UploadTester v0.1";
var postData = "--" + boundary + "\r\nContent-Disposition: form-data\r\n\r\n";
postData += string.Format("token={0}\r\n", _token);
postData += "--" + boundary + "\r\nContent-Disposition: form-data; name="bilingualFile"; filename="1.xls"\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: binary\r\n\r\n";
byte[] byteArray = Encoding.UTF8.GetBytes(postData);
byte[] filedata = null;
using (var reader = new BinaryReader(File.OpenRead(@"D:\1.xls")))
filedata = reader.ReadBytes((int)reader.BaseStream.Length);
_request.ContentLength = byteArray.Length + filedata.Length;
_request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
_request.GetRequestStream().Write(filedata, 0, filedata.Length);
WebResponse response = _request.GetResponse();
Stream data = response.GetResponseStream();
StreamReader sReader = new StreamReader(data);
String sResponse = sReader.ReadToEnd();
response.Close();Решение задачи: «Требуется Upload файл на веб-сервер»
textual
Листинг программы
public static bool Authentification(string userName, string password)
{
using (var client = new WebClient())
{
var address = string.Format("http://cloud1.memsource.com/web/api/v3/auth/login?userName={0}&password={1}", userName, password);
var content = client.DownloadString(address);
var js = new JavaScriptSerializer();
var authResponse = (AuthResponse)js.Deserialize(content, typeof(AuthResponse));
_token = authResponse.Token;
return !string.IsNullOrWhiteSpace(_token);
}
}