简体   繁体   English

从移动应用程序在服务器上上传图像

[英]Upload image on server from mobile application

I am working on a mobile application on .net. 我正在开发.net上的移动应用程序。 This is a windows mobile application. 这是Windows Mobile应用程序。 I am facing a problem in this application that I wanna upload an image/file to given url/server. 我在此应用程序中遇到一个问题,我想将图像/文件上传到给定的url /服务器。 Many upload classes is not using like Webclient, WebRequest, WebResponse. 许多上载类未使用,例如Webclient,WebRequest,WebResponse。 I used HttpWebRequest, That is not connecting with server. 我使用了HttpWebRequest,即未与服务器连接。 Please anyone can help me on how to upload the images on given url in windows mobile 6 in .net. 请任何人都可以帮助我如何在.net的Windows Mobile 6中的给定URL上上传图像。

Thanks in advance. 提前致谢。

Hey take a look at this code for uploading at Image Shack: 嘿,看看在Image Shack上传的这段代码:

You can modify it to use with other web site by just using Fiddler to change the web requests 您可以通过仅使用Fiddler更改Web请求来将其修改为与其他网站一起使用

public class Uploader
    {

        public string UploadFileToImageShack(object oFileName)
        {
            try
            {
                string fileName = oFileName as string;
                string contentType = null;
                CookieContainer cookie = new CookieContainer();
                NameValueCollection col = new NameValueCollection();
                col["MAX_FILE_SIZE"] = "3145728";
                col["refer"] = "";
                col["brand"] = "";
                col["optimage"] = "1";
                col["rembar"] = "1";
                col["submit"] = "host it!";
                List<string> l = new List<string>();
                switch (fileName.Substring(fileName.Length - 3, 3))
                {
                    case "jpg":
                        contentType = "image/jpeg";
                        break;
                    case "peg":
                        contentType = "image/jpeg";
                        break;
                    case "gif":
                        contentType = "image/gif";
                        break;
                    case "png":
                        contentType = "image/png";
                        break;
                    case "bmp":
                        contentType = "image/bmp";
                        break;
                    case "tif":
                        contentType = "image/tiff";
                        break;
                    case "iff":
                        contentType = "image/tiff";
                        break;
                    default:
                        contentType = "image/unknown";
                        break;
                }

                string resp;
                col["optsize"] = "resample";
                resp = UploadFileEx(fileName,
                                               "http://www.imageshack.us/index.php",
                                               "fileupload",
                                               contentType,
                                               col,
                                               cookie);
                return resp;


            }
            catch (Exception ex)
            {
                return "";
            }
        }



        public static string UploadFileEx(string uploadfile, string url,
           string fileFormName, string contenttype, System.Collections.Specialized.NameValueCollection querystring,
           CookieContainer cookies)
        {
            if ((fileFormName == null) ||
                (fileFormName.Length == 0))
            {
                fileFormName = "file";
            }

            if ((contenttype == null) ||
                (contenttype.Length == 0))
            {
                contenttype = "application/octet-stream";
            }


            string postdata;
            postdata = "?";
            if (querystring != null)
            {
                foreach (string key in querystring.Keys)
                {
                    postdata += key + "=" + querystring.Get(key) + "&";
                }
            }
            Uri uri = new Uri(url + postdata);


            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
            webrequest.CookieContainer = cookies;
            webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
            webrequest.Method = "POST";


            // Build up the post message header
            StringBuilder sb = new StringBuilder();
            sb.Append("--");
            sb.Append(boundary);
            sb.Append("\r\n");
            sb.Append("Content-Disposition: form-data; name=\"");
            sb.Append(fileFormName);
            sb.Append("\"; filename=\"");
            sb.Append(Path.GetFileName(uploadfile));
            sb.Append("\"");
            sb.Append("\r\n");
            sb.Append("Content-Type: ");
            sb.Append(contenttype);
            sb.Append("\r\n");
            sb.Append("\r\n");

            string postHeader = sb.ToString();
            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);

            // Build the trailing boundary string as a byte array
            // ensuring the boundary appears on a line by itself
            byte[] boundaryBytes =
                   Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");

            FileStream fileStream = new FileStream(uploadfile,
                                        FileMode.Open, FileAccess.Read);
            long length = postHeaderBytes.Length + fileStream.Length +
                                                   boundaryBytes.Length;
            webrequest.ContentLength = length;

            Stream requestStream = webrequest.GetRequestStream();

            // Write out our post header
            requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

            // Write out the file contents
            byte[] buffer = new Byte[checked((uint)Math.Min(4096,
                                     (int)fileStream.Length))];
            int bytesRead = 0;
            while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                requestStream.Write(buffer, 0, bytesRead);

            // Write out the trailing boundary
            requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
            WebResponse responce = webrequest.GetResponse();
            Stream s = responce.GetResponseStream();
            StreamReader sr = new StreamReader(s);

            return sr.ReadToEnd();
        } 


    }

There is example code on CodeProject that reimplements WebClient.UploadFile "with more" using just HttpwebRequest and friends, which at first glance looks like it uses features that are available in the Compact Framework. CodeProject上有一些示例代码 ,仅使用HttpwebRequest和好友重新实现了WebClient.UploadFile “更多”功能,乍一看看起来它使用的是Compact Framework中可用的功能。 You could check the code works with the full framework on a PC and use a tool like Fiddler to check what goes over the wire., before then compiling for the Compact Framework. 您可以在PC上使用完整框架检查代码是否工作,并使用诸如Fiddler之类的工具来检查网络上的内容,然后再编译为Compact Framework。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM