0x00.添加引用
using System;
using System.IO;
using System.Net.Http.Headers;
using System.ComponentModel;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.UI.Xaml.Media.Imaging;
0x01.选择文件
List<UploadImageInfo> imginfo = new List<UploadImageInfo>();
private async void SelectFiles_Click(object sender, RoutedEventArgs e)
{
FileOpenPicker openPicker = new FileOpenPicker();
openPicker.ViewMode = PickerViewMode.Thumbnail;
openPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
openPicker.FileTypeFilter.Add(".jpg");
openPicker.FileTypeFilter.Add(".jpeg");
openPicker.FileTypeFilter.Add(".png");
var files = await openPicker.PickMultipleFilesAsync();//选择多个文件
foreach (StorageFile sf in files)
{
tokenInfo = await TokenInfo.GetTokenAsync();//自定义获取token函数
UploadImageInfo uploadImages = new UploadImageInfo();//自定义图片类
BitmapImage bitmap = new BitmapImage();
using (var stream = await sf.OpenAsync(FileAccessMode.ReadWrite))
{
bitmap.SetSource(stream);
if (stream.Size < 1024 * 1024)
{
uploadImages.DataSize = Math.Round((double)stream.Size / 1024, 2).ToString ()+" Kb";
}
else
{
uploadImages.DataSize = Math.Round((double)stream.Size / 1024 / 1024, 2).ToString()+" Mb";
}
Stream s = WindowsRuntimeStreamExtensions.AsStreamForRead(stream.GetInputStreamAt(0));
uploadImages.ContentByte = ConvertStreamTobyte(s);
s.Close();//务必结束,否则文件会一直被占用。
}
uploadImages.Content = bitmap;
uploadImages.Name = sf.Name;
uploadImages.DateCreated = sf.DateCreated.ToString();
uploadImages.Cameras = cameras;
uploadImages.Lens = lens;
imginfo.Add(uploadImages);
}
0x02.异步上传
public static async Task<string> UploadFilesAsync(UploadImageInfo uploadImageInfo, string uzrtoken, string uploadtoken, string userId, string campaignId)
{
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(Sign.HttpClientHandler);
httpClient.DefaultRequestHeaders.Accept.ParseAdd("text/*");
httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd("Shockwave Flash");
HttpResponseMessage response = new HttpResponseMessage();
var content = new MultipartFormDataContent();//使用MultipartFormDataContent进行form-data请求头封装
var contentByteContent = new ByteArrayContent(uploadImageInfo.ContentByte);
contentByteContent.Headers.Add("Content-Type", "application/octet-stream");
contentByteContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
contentByteContent.Headers.ContentDisposition.FileName = "\"" + uploadImageInfo.Name + "\"";
contentByteContent.Headers.ContentDisposition.Name = "\"imagefile\"";//封装POST请求头
{
content.Add(new StringContent(uploadImageInfo.Name), "\"Filename\"");
content.Add(new StringContent("1"), "\"uploadTokenType\"");
content.Add(new StringContent("0"), "\"fileType\"");
content.Add(new StringContent(uploadImageInfo.Name), "\"title\"");
content.Add(new StringContent("2"), "\"userTokenType\"");
content.Add(new StringContent(campaignId), "\"campaignId\"");
content.Add(new StringContent(userId), "\"userId\"");
content.Add(new StringContent(uploadtoken), "\"uploadToken\"");
content.Add(new StringContent(uzrtoken), "\"userToken\"");
content.Add(contentByteContent, "\"imagefile\"");
content.Add(new StringContent("Submit Query"), "\"Upload\"");
}
response = await httpClient.PostAsync(new Uri("http://media.sony.com.cn/alphacafe/upload", UriKind.Absolute), content);
string sid = response.Content.ReadAsStringAsync().Result;
if (response.IsSuccessStatusCode&&sid.Contains("fileID")==true)
{
string s = response.Content.ReadAsStringAsync().Result.Split('"')[7];
return s;
}
else return "failed";
}
0x03.上传
private async void Submit_Click(object sender, RoutedEventArgs e)
{
foreach (UploadImageInfo item in imgitems)
{
string fileId = await UploadImageInfo.UploadFilesAsync(item, tokenInfo.userToken, tokenInfo.upLoadToken, userId, "16");
if (fileId.Contains("failed") == false)
{
item.FileID.Insert(0, fileId);//上传成功则返回文件Id
}
}
}