MultipartFormDataContent post上传文件到PHP后台

「已注销」 2014-06-27 02:21:41
最近在写一个metro程序,后台是PHP写的,然后要用post的方法上传文件到后台,PHP后台获取文件时用全局变量$_FILES[‘filename’]来获取的
对应的HTML是

<input type="file" name="filename">


现在我想用metro来完成相同的功能,但是我不知道在metro的MultipartFormDataContent 里name=“filename”这一段应该怎么设置,求大神指教

下面是我的c#代码

public async void send()
{
try
{
HttpClient client = new HttpClient();

StorageFile file = await KnownFolders.DocumentsLibrary.CreateFileAsync("test.jpg", CreationCollisionOption.OpenIfExists);
IBuffer buffer = await FileIO.ReadBufferAsync(file);
//byte[] bytes = WindowsRuntimeBufferExtensions.ToArray(buffer, 0, (int)buffer.Length - 1);
Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer);


HttpContent piccontent = new StreamContent(stream);
piccontent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("multipart/form-data");
MultipartFormDataContent httpcontent = new MultipartFormDataContent();
httpcontent.Add(piccontent, "files");

HttpResponseMessage response = await client.PostAsync("http://localhost/csharpserver/upload.php", httpcontent);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
result.Text = responseBody;
}
catch (HttpRequestException e)
{
//return e.ToString();
result.Text = e.ToString();
}
}
...全文
423 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn_aspnet 2014-06-27
  • 打赏
  • 举报
回复
Win8Metro中,我们不能在向以前那样调用WIN32的API函数来进行文件操作,因此,下面就来介绍一下Win8 Metro中文件的读写操作。 1 Windows 8 Metro Style App中文件的操作都包含在Windows.Storage命名空间中,其中包括StorageFolder,StorageFile,FileIO等类库。 2 Win8文件的读写操作都是异步方式进行的,因此要使用async 3 创建文件: StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting); 这里我们创建了一个1.txt的文档,如果已经存在这个文档,那么新建的文档将替换,覆盖掉旧文档。 由于文档读写是异步方式操作,因此,我们要将它放到async修饰的函数里才可以使用,具体如下: private async void SelectImageOne(byte[]outArary) { StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption.ReplaceExisting); await FileIO.WriteBytesAsync(storageFile, outArary); } 在上述的代码中,参数是我们要写入到文件“1.txt”里的内容,这里是一个byte[]数组。 4 写入文件: 如3中的代码所示await FileIO.WriteBytesAsync(storageFile, outArary); 写入文件的方法是FileIO中的write方法,这里一共有以下四种方法: WriteBufferAsync(Windows.Storage.IStorageFile file, IBuffer buffer); WriteBytesAsync(Windows.Storage.IStorageFile file, byte[] buffer); WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines); WriteLinesAsync(Windows.Storage.IStorageFile file, IEnumerable<string> lines, UnicodeEncoding encoding); WriteTextAsync(Windows.Storage.IStorageFile file, string contents); WriteTextAsync(Windows.Storage.IStorageFile file, string contents, UnicodeEncoding encoding); 这里我们列举的是写入byte[]的方法。 5 打开文件: StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists); 这里我们打开了一个名字为”1.txt”的文本文件。 6 读取文件: 在FileIO中有三种文件读取方法,分别读取不同的文件: await FileIO.ReadTextAsync(Windows.Storage.IStorageFile file); await FileIO.ReadTextAsync(Windows.Storage.IStorageFile file, UnicodeEncoding encoding);//返回指定的文本编码格式 await FileIO. ReadBufferAsync (Windows.Storage.IStorageFile file); await FileIO. ReadLinesAsync (Windows.Storage.IStorageFile file); await FileIO. ReadLinesAsync (Windows.Storage.IStorageFile file, UnicodeEncoding encoding); 这里我们以文本为例: string fileIContent = await FileIO. ReadTextAsync (storageFile); 这样我们就返回了一个string文本。 我们也可以通过流来读取文件: IBuffer buffer = await FileIO.ReadBufferAsync(storageFile); using (DataReader dataReader = DataReader.FromBuffer(buffer)) { string fileContent = dataReader.ReadString (buffer.Length); } 7 IBuffer, byte[], Stream之间的相互转换: StorageFile storageFile=await Windows.Storage.KnownFolders.DocumentsLibrary.CreateFileAsync("1.txt",Windows.Storage.CreationCollisionOption. OpenIfExists); IBuffer buffer = await FileIO.ReadBufferAsync(storageFile); byte[] bytes=WindowsRuntimeBufferExtensions.ToArray(buffer,0,(int)buffer.Length); Stream stream = WindowsRuntimeBufferExtensions.AsStream(buffer); 另外一个实例: 1.首先创建一个文件夹,在文件夹里创建文件    private async void CreateButton_Click(object sender, RoutedEventArgs e) {     string name=FileName.Text;  //创建文件的名称     folder =ApplicationData.Current.LocalFolder;     StorageFolder tempFolder = await folder.CreateFolderAsync("Config",CreationCollisionOption.OpenIfExists); file =await tempFolder.CreateFileAsync(name,CreationCollisionOption.OpenIfExists); } 2.在创建好的文件里,写入我们的数据,这里介绍三种写入文件的方式   private async void WriteButton_Click(object sender, RoutedEventArgs e) {     string content = InputTextBox.Text.Trim();     ComboBoxItem item = WriteType.SelectedItem asComboBoxItem;  //选择写入的方式     string type = item.Tag.ToString(); switch (type) {       case"1":    //以文本的方式写入文件         await FileIO.WriteTextAsync(file,content);         break;       case"2":    //以bytes的方式写入文件           Encoding encoding = Encoding.UTF8;           byte[] bytes = encoding.GetBytes(content);          await FileIO.WriteBytesAsync(file,bytes);           break;       case"3": //以流的方式写入文件           IBuffer buffer = Convert(content);  //将string转换成IBuffer类型的        await FileIO.WriteBufferAsync(file,buffer);         break; } } 3.读取刚才写入文件里的数据,这里也介绍三种读取文件的方式    private async void ReadButton_Click(object sender, RoutedEventArgs e) {       ComboBoxItem item = ReadType.SelectedItem asComboBoxItem;    string type = item.Tag.ToString();       string content = string.Empty;      switch (type) {         case"1":        //以文本的方式读取文件     content =await FileIO.ReadTextAsync(file);      break;        case"2":        //以流的方式读取文件             IBuffer buffer = await FileIO.ReadBufferAsync(file);      content = Convert(buffer);           break;        case"3":      content =await Convert();           break; } ShowTextBox.Text = content; }       private IBuffer Convert(string text)  //将string转换成IBuffer类型的 {       using (InMemoryRandomAccessStream stream = newInMemoryRandomAccessStream()) {         using (DataWriter dataWriter = newDataWriter())    {     dataWriter.WriteString(text);             return dataWriter.DetachBuffer();    } } }   private string Convert(IBuffer buffer)    //将IBuffer转换成string类型的 {       string text = string.Empty;      using (DataReader dataReader=DataReader.FromBuffer(buffer)) {    text = dataReader.ReadString(buffer.Length); }     return text; }   private async Task<string> Convert() {     string text=string.Empty;      using (IRandomAccessStream readStream = await file.OpenAsync(FileAccessMode.Read)) {         using (DataReader dataReader = newDataReader(readStream))   {             UInt64 size = readStream.Size;            if (size <= UInt32.MaxValue)      {             UInt32 numBytesLoaded = await dataReader.LoadAsync((UInt32)size);       text = dataReader.ReadString(numBytesLoaded);      }   } }     return text; } 4.读取文件的属性     private async void ReadPropertyButton_Click(object sender, RoutedEventArgs e) {         ComboBoxItem item = Files.SelectedItem asComboBoxItem;        string name = item.Content.ToString();        StorageFolder tempFolder =await Windows.Storage.ApplicationData.Current.LocalFolder.GetFolderAsync("Config");        if (tempFolder != null)     {      file =await tempFolder.GetFileAsync(name);         if (file != null)      {           StringBuilder builder = newStringBuilder();       builder.AppendLine("文件名称:"+file.Name);       builder.AppendLine("文件类型:"+file.FileType);           BasicProperties basic = await file.GetBasicPropertiesAsync();       builder.AppendLine("文件大小:"+basic.Size+"bytes");      builder.AppendLine("上次修改时间:"+basic.DateModified);       builder.AppendLine("文件路径:"+file.Path);      List<string> list = newList<string>();      list.Add("System.DateAccessed");      list.Add("System.FileOwner");             IDictionary<string, object> extra = await file.Properties.RetrievePropertiesAsync(list);            var property = extra["System.DateAccessed"];           if (property != null)      {        builder.AppendLine("文件创建时间:"+property);     }     property = extra["System.FileOwner"];            if(property!=null)     {        builder.AppendLine("文件所有者:"+property);      }     DisplyProperty.Text = builder.ToString(); } } } 5.复制删除文件     private async void OKButton_Click(object sender, RoutedEventArgs e) {     try {       ComboBoxItem item=FilesList.SelectedItem asComboBoxItem;       string fileName = item.Content.ToString();  //获得选中的文件名称       int index=fileName.IndexOf('.');       string firstName = fileName.Substring(0,index);       string type = fileName.Substring(index);       StorageFolder tempFolder = await folder.GetFolderAsync("Config");    //文件在Config文件夹下放置着 file =await tempFolder.GetFileAsync(fileName);      if (file == null)   {    Msg.Text ="文件不存在!";          return; }     if (CopyoButton.IsChecked.Value) //判断进行复制还是删除 {         StorageFile copy = await file.CopyAsync(tempFolder,firstName+"复制"+type,NameCollisionOption.ReplaceExisting);   Msg.Text ="复制成功!!!"; }       else {         await file.DeleteAsync(); Msg.Text ="删除成功!!!"; } }   catch { Msg.Text ="操作失败!"; } } 不知道是否有帮助
「已注销」 2014-06-27
  • 打赏
  • 举报
回复
自己顶,求大神指导啊

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧