refabrique : une librairie serveur
This commit is contained in:
137
Yavsc.Server/Helpers/FileUploadHelpers.cs
Normal file
137
Yavsc.Server/Helpers/FileUploadHelpers.cs
Normal file
@ -0,0 +1,137 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
using System.Net.Http;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
using Yavsc.Server.Model;
|
||||
|
||||
namespace Yavsc.Server.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Thanks to Stefan @ Stackoverflow
|
||||
/// </summary>
|
||||
public class RequestHelper
|
||||
{
|
||||
string WRPostMultipart(string url, Dictionary<string, object> parameters, string authorizationHeader = null)
|
||||
{
|
||||
|
||||
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
|
||||
byte[] boundaryBytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
|
||||
|
||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||
request.ContentType = "multipart/form-data; boundary=" + boundary;
|
||||
request.Method = "POST";
|
||||
request.KeepAlive = true;
|
||||
request.Credentials = System.Net.CredentialCache.DefaultCredentials;
|
||||
if (authorizationHeader != null)
|
||||
request.Headers["Authorization"] = authorizationHeader;
|
||||
if (parameters != null && parameters.Count > 0)
|
||||
{
|
||||
|
||||
using (Stream requestStream = request.GetRequestStream())
|
||||
{
|
||||
using (WebResponse response = request.GetResponse())
|
||||
{
|
||||
|
||||
|
||||
foreach (KeyValuePair<string, object> pair in parameters)
|
||||
{
|
||||
|
||||
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
|
||||
if (pair.Value is FormFile)
|
||||
{
|
||||
FormFile file = pair.Value as FormFile;
|
||||
string header = "Content-Disposition: form-data; name=\"" + pair.Key + "\"; filename=\"" + file.Name + "\"\r\nContent-Type: " + file.ContentType + "\r\n\r\n";
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(header);
|
||||
requestStream.Write(bytes, 0, bytes.Length);
|
||||
byte[] buffer = new byte[32768];
|
||||
int bytesRead;
|
||||
if (file.Stream == null)
|
||||
{
|
||||
// upload from file
|
||||
using (FileStream fileStream = File.OpenRead(file.FilePath))
|
||||
{
|
||||
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
|
||||
requestStream.Write(buffer, 0, bytesRead);
|
||||
fileStream.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// upload from given stream
|
||||
while ((bytesRead = file.Stream.Read(buffer, 0, buffer.Length)) != 0)
|
||||
requestStream.Write(buffer, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
string data = "Content-Disposition: form-data; name=\"" + pair.Key + "\"\r\n\r\n" + pair.Value;
|
||||
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(data);
|
||||
requestStream.Write(bytes, 0, bytes.Length);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
|
||||
requestStream.Write(trailer, 0, trailer.Length);
|
||||
requestStream.Close();
|
||||
|
||||
using (Stream responseStream = response.GetResponseStream())
|
||||
using (StreamReader reader = new StreamReader(responseStream))
|
||||
{
|
||||
return reader.ReadToEnd();
|
||||
}
|
||||
} // end WebResponse response
|
||||
|
||||
} // end using requestStream
|
||||
|
||||
}
|
||||
else throw new ArgumentOutOfRangeException("no parameter found ");
|
||||
|
||||
}
|
||||
|
||||
public static async Task<string> PostMultipart(string url, FormFile[] formFiles, string access_token = null)
|
||||
{
|
||||
|
||||
if (formFiles != null && formFiles.Length > 0)
|
||||
{
|
||||
var client = new HttpClient();
|
||||
var formData = new MultipartFormDataContent();
|
||||
|
||||
if (access_token != null)
|
||||
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token);
|
||||
foreach (var formFile in formFiles)
|
||||
{
|
||||
HttpContent fileStreamContent = new StreamContent(formFile.Stream);
|
||||
if (formFile.ContentType!=null)
|
||||
fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue(formFile.ContentType);
|
||||
else fileStreamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
|
||||
|
||||
// fileStreamContent.Headers.ContentDisposition = formFile.ContentDisposition!=null? new ContentDispositionHeaderValue(
|
||||
// formFile.ContentDisposition) : new ContentDispositionHeaderValue("form-data; name=\"file\"; filename=\"" + formFile.Name + "\"");
|
||||
fileStreamContent.Headers.Add("Content-Disposition", formFile.ContentDisposition);
|
||||
fileStreamContent.Headers.Add("Content-Length", formFile.Stream.Length.ToString());
|
||||
|
||||
//fileStreamContent.Headers.Add("FilePath", formFile.FilePath);
|
||||
|
||||
formData.Add(fileStreamContent, "file", formFile.Name);
|
||||
|
||||
}
|
||||
|
||||
var response = client.PostAsync(url, formData).Result;
|
||||
if (!response.IsSuccessStatusCode)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return await response.Content.ReadAsStringAsync();
|
||||
} // end if formFiles != null
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
99
Yavsc.Server/Helpers/SimpleJsonPostMethod.cs
Normal file
99
Yavsc.Server/Helpers/SimpleJsonPostMethod.cs
Normal file
@ -0,0 +1,99 @@
|
||||
//
|
||||
// PostJson.cs
|
||||
//
|
||||
// Author:
|
||||
// Paul Schneider <paulschneider@free.fr>
|
||||
//
|
||||
// Copyright (c) 2015 Paul Schneider
|
||||
//
|
||||
// This program is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU Lesser General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU Lesser General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU Lesser General Public License
|
||||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
using System.Net;
|
||||
using System.IO;
|
||||
using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Json;
|
||||
|
||||
namespace Yavsc.Server.Helpers
|
||||
{
|
||||
/// <summary>
|
||||
/// Simple json post method.
|
||||
/// </summary>
|
||||
public class SimpleJsonPostMethod : IDisposable
|
||||
{
|
||||
private HttpWebRequest request=null;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the Yavsc.Helpers.SimpleJsonPostMethod class.
|
||||
/// </summary>
|
||||
/// <param name="pathToMethod">Path to method.</param>
|
||||
public SimpleJsonPostMethod (string pathToMethod, string authorizationHeader = null, string method = "POST")
|
||||
{
|
||||
request = (HttpWebRequest) WebRequest.Create (pathToMethod);
|
||||
request.Method = method;
|
||||
request.Accept = "application/json";
|
||||
request.ContentType = "application/json";
|
||||
request.SendChunked = true;
|
||||
request.TransferEncoding = "UTF-8";
|
||||
if (authorizationHeader!=null)
|
||||
request.Headers["Authorization"]=authorizationHeader;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
request.Abort();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invoke the specified query.
|
||||
/// </summary>
|
||||
/// <param name="query">Query.</param>
|
||||
public async Task<TAnswer> Invoke<TAnswer>(object query)
|
||||
{
|
||||
|
||||
using (Stream streamQuery = await request.GetRequestStreamAsync()) {
|
||||
using (StreamWriter writer = new StreamWriter(streamQuery)) {
|
||||
writer.Write (JsonConvert.SerializeObject(query));
|
||||
}}
|
||||
TAnswer ans = default (TAnswer);
|
||||
using (WebResponse response = await request.GetResponseAsync ()) {
|
||||
using (Stream responseStream = response.GetResponseStream ()) {
|
||||
using (StreamReader rdr = new StreamReader (responseStream)) {
|
||||
ans = (TAnswer) JsonConvert.DeserializeObject<TAnswer> (rdr.ReadToEnd ());
|
||||
}
|
||||
}
|
||||
response.Close();
|
||||
}
|
||||
return ans;
|
||||
}
|
||||
|
||||
public async Task<JsonValue> InvokeJson(object query)
|
||||
{
|
||||
JsonValue jsonDoc=null;
|
||||
using (Stream streamQuery = request.GetRequestStream()) {
|
||||
using (StreamWriter writer = new StreamWriter(streamQuery)) {
|
||||
writer.Write (JsonConvert.SerializeObject(query));
|
||||
}}
|
||||
using (WebResponse response = request.GetResponse ()) {
|
||||
using (Stream stream = response.GetResponseStream ()) {
|
||||
if (stream.Length>0)
|
||||
jsonDoc = await Task.Run (() => JsonObject.Load (stream));
|
||||
}
|
||||
response.Close();
|
||||
}
|
||||
return jsonDoc;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
26
Yavsc.Server/Model/FormFile.cs
Normal file
26
Yavsc.Server/Model/FormFile.cs
Normal file
@ -0,0 +1,26 @@
|
||||
|
||||
using System.IO;
|
||||
using System.Net.Mime;
|
||||
|
||||
namespace Yavsc.Server.Model
|
||||
{
|
||||
public class FormFile
|
||||
{
|
||||
public string Name { get; set; }
|
||||
|
||||
string contentDispositionString;
|
||||
public string ContentDisposition { get {
|
||||
return contentDispositionString;
|
||||
} set {
|
||||
ContentDisposition contentDisposition = new ContentDisposition(value);
|
||||
Name = contentDisposition.FileName;
|
||||
contentDispositionString = value;
|
||||
} }
|
||||
|
||||
public string ContentType { get; set; }
|
||||
|
||||
public string FilePath { get; set; }
|
||||
|
||||
public Stream Stream { get; set; }
|
||||
}
|
||||
}
|
48
Yavsc.Server/project.json
Normal file
48
Yavsc.Server/project.json
Normal file
@ -0,0 +1,48 @@
|
||||
{
|
||||
"version": "1.0.0-*",
|
||||
"description": "Yavsc server common library",
|
||||
"authors": [
|
||||
"Paul Schneider <paul@pschneider.fr>"
|
||||
],
|
||||
"packOptions": {
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/pazof/yavsc"
|
||||
},
|
||||
"licenseUrl": "https://github.com/pazof/yavsc/blob/vnext/LICENSE",
|
||||
"requireLicenseAcceptance": true,
|
||||
"owners": [
|
||||
"Paul Schneider <paul@pschneider.fr>"
|
||||
],
|
||||
"summary": "Yet another very small company",
|
||||
"projectUrl": "http://yavsc.pschneider.fr",
|
||||
"tags": [
|
||||
"Blog",
|
||||
"Blog",
|
||||
"PoS",
|
||||
"Chat"
|
||||
]
|
||||
},
|
||||
"tooling": {
|
||||
"defaultNamespace": "Yavsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "9.0.1",
|
||||
"Yavsc.Abstract": {
|
||||
"target": "project",
|
||||
"type": "build"
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net451": {
|
||||
"frameworkAssemblies": {
|
||||
"System.ComponentModel.DataAnnotations": "4.0.0",
|
||||
"System.Json": "4.0.0",
|
||||
"System.Net": "4.0.0.0",
|
||||
"System.Net.Http": "4.0.0.0",
|
||||
"System.Xml": "4.0.0.0",
|
||||
"System": "4.0.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
115
Yavsc.Server/project.lock.json
Normal file
115
Yavsc.Server/project.lock.json
Normal file
@ -0,0 +1,115 @@
|
||||
{
|
||||
"locked": false,
|
||||
"version": 2,
|
||||
"targets": {
|
||||
".NETFramework,Version=v4.5.1": {
|
||||
"Newtonsoft.Json/9.0.1": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
}
|
||||
},
|
||||
"Yavsc.Abstract/1.0.5": {
|
||||
"type": "project",
|
||||
"framework": ".NETFramework,Version=v4.5.1",
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "9.0.1"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System.ComponentModel.DataAnnotations",
|
||||
"System.Json"
|
||||
]
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.5.1/debian.9-x86": {
|
||||
"Newtonsoft.Json/9.0.1": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
}
|
||||
},
|
||||
"Yavsc.Abstract/1.0.5": {
|
||||
"type": "project",
|
||||
"framework": ".NETFramework,Version=v4.5.1",
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "9.0.1"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System.ComponentModel.DataAnnotations",
|
||||
"System.Json"
|
||||
]
|
||||
}
|
||||
},
|
||||
".NETFramework,Version=v4.5.1/debian.9-x64": {
|
||||
"Newtonsoft.Json/9.0.1": {
|
||||
"type": "package",
|
||||
"compile": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net45/Newtonsoft.Json.dll": {}
|
||||
}
|
||||
},
|
||||
"Yavsc.Abstract/1.0.5": {
|
||||
"type": "project",
|
||||
"framework": ".NETFramework,Version=v4.5.1",
|
||||
"dependencies": {
|
||||
"Newtonsoft.Json": "9.0.1"
|
||||
},
|
||||
"frameworkAssemblies": [
|
||||
"System.ComponentModel.DataAnnotations",
|
||||
"System.Json"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"Yavsc.Abstract/1.0.5": {
|
||||
"type": "project",
|
||||
"path": "../Yavsc.Abstract/project.json"
|
||||
},
|
||||
"Newtonsoft.Json/9.0.1": {
|
||||
"type": "package",
|
||||
"sha512": "U82mHQSKaIk+lpSVCbWYKNavmNH1i5xrExDEquU1i6I5pV6UMOqRnJRSlKO3cMPfcpp0RgDY+8jUXHdQ4IfXvw==",
|
||||
"files": [
|
||||
"lib/net20/Newtonsoft.Json.dll",
|
||||
"lib/net20/Newtonsoft.Json.xml",
|
||||
"lib/net35/Newtonsoft.Json.dll",
|
||||
"lib/net35/Newtonsoft.Json.xml",
|
||||
"lib/net40/Newtonsoft.Json.dll",
|
||||
"lib/net40/Newtonsoft.Json.xml",
|
||||
"lib/net45/Newtonsoft.Json.dll",
|
||||
"lib/net45/Newtonsoft.Json.xml",
|
||||
"lib/netstandard1.0/Newtonsoft.Json.dll",
|
||||
"lib/netstandard1.0/Newtonsoft.Json.xml",
|
||||
"lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.dll",
|
||||
"lib/portable-net40+sl5+wp80+win8+wpa81/Newtonsoft.Json.xml",
|
||||
"lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll",
|
||||
"lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.xml",
|
||||
"Newtonsoft.Json.9.0.1.nupkg",
|
||||
"Newtonsoft.Json.9.0.1.nupkg.sha512",
|
||||
"Newtonsoft.Json.nuspec",
|
||||
"tools/install.ps1"
|
||||
]
|
||||
}
|
||||
},
|
||||
"projectFileDependencyGroups": {
|
||||
"": [
|
||||
"Newtonsoft.Json >= 9.0.1",
|
||||
"Yavsc.Abstract "
|
||||
],
|
||||
".NETFramework,Version=v4.5.1": [
|
||||
"fx/System.ComponentModel.DataAnnotations >= 4.0.0",
|
||||
"fx/System.Json >= 4.0.0",
|
||||
"fx/System.Net >= 4.0.0",
|
||||
"fx/System.Xml >= 4.0.0",
|
||||
"fx/System >= 4.0.0"
|
||||
]
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user