首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用POST上传图像(Windows 8)

使用POST上传图像(Windows 8)
EN

Stack Overflow用户
提问于 2013-09-12 00:15:49
回答 2查看 888关注 0票数 1

我有代码,必须上传图像到uri与参数file1。但是代码不起作用。为什么图片不能上传?

下面是我的代码:

代码语言:javascript
复制
public void Upload
{
    string oauthUrl = "http://MY_Uri";
    HttpClient theAuthClient = new HttpClient();

    HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, oauthUrl);
    StorageFolder storageFolder = KnownFolders.PicturesLibrary;
    StorageFile sf = await storageFolder.GetFileAsync("ss.png");
    IBuffer buffer = await FileIO.ReadBufferAsync(sf);
    byte[] fileData = buffer.ToArray();
    Encoding encoding = Encoding.GetEncoding("Windows-1252");
    string text = encoding.GetString(fileData, 0, fileData.Length);
    string content = @"file1=" + text + "";

    txt.Text = content;
    StorageFolder storageFolder2 = KnownFolders.PicturesLibrary;
    StorageFile sampleFile = await storageFolder2.CreateFileAsync("sample.txt");
    await Windows.Storage.FileIO.WriteTextAsync(sampleFile, "" + text + "");

    request.Method = HttpMethod.Post;
    request.Content = new StreamContent(new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)));
    request.Content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");

    try
    {
        HttpResponseMessage response = await theAuthClient.SendAsync(request);
        handleResponse(response);
    }
    catch (HttpRequestException hre)
    {

    }
}
public async void handleResponse(HttpResponseMessage response)
{
    string content = await response.Content.ReadAsStringAsync();
    Account account = JsonConvert.DeserializeObject<Account>(content);
    if (content != null)
    {

    }
}
EN

回答 2

Stack Overflow用户

发布于 2013-09-12 00:26:05

最近回答了一个类似的问题。文件内容在请求的正文中发送。

删除您的代码行:“System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)));"

  • Change =
  1. ( new System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(content)));”
  2. Change your header for Content-StreamContent to "image/png“or”application/octet-StreamContent“.
  3. 以这种方式将字节数组写入请求(imb是镜像的byte[] ):

using (Stream os = request.GetRequestStream()) { os.Write(imb, 0, imb.Length); }

指向类似问题的链接:A previous answer

票数 1
EN

Stack Overflow用户

发布于 2013-11-01 22:06:04

这是我用来将图像上传到Windows 8应用程序中的PHP服务器的代码

代码语言:javascript
复制
            string serverUrl = "http://www.mywebsite.com/receiveImage.php";

            HttpWebRequest webRequest = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
            webRequest.Method = "POST";
            webRequest.ContentType = "application/x-www-form-urlencoded";

            try
            {
                IBuffer buffer = await FileIO.ReadBufferAsync(file);
                byte[] fileData = System.Text.Encoding.UTF8.GetBytes(System.Convert.ToBase64String(buffer.ToArray()).Replace("+","%2B"));
                byte[] prefix = System.Text.Encoding.UTF8.GetBytes("ImageData=");
                byte[] combinedData = new byte[fileData.Length + prefix.Length];
                System.Buffer.BlockCopy(prefix, 0, combinedData, 0, prefix.Length);
                System.Buffer.BlockCopy(fileData, 0, combinedData, prefix.Length, fileData.Length);

                Stream requestStream = await webRequest.GetRequestStreamAsync();
                requestStream.Write(combinedData, 0, combinedData.Length);


                // Get the response from the server.
                WebResponse response = await webRequest.GetResponseAsync();
                StreamReader requestReader = new StreamReader(response.GetResponseStream());
                String webResponse = requestReader.ReadToEnd();
            }
            catch (Exception ex)
            {

            }

Replace("+","%2B")很重要。否则,当PHP接收+字符时,+字符将被转换为空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18746309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档