基于.net后台 上传文件到apicloud

用fileupload控件上传文件到apicloud数据库中,不说闲话。直接看代码

前台代码如下

<asp:Image ID="Recipe_ImageUrl" runat="server"  ImageUrl=""/>
<asp:FileUpload ID="FileUpload1" runat="server"  />
<asp:Button ID="Button1" runat="server" Text="上传" OnClick="FileUpload"/>

 后台代码如下

protected void FileUpload(object sender, EventArgs e)
        {
            string fileName = FileUpload1.PostedFile.FileName;//获取fileupload控件选择的文件名
            if (fileName != "")
            {
                fileName = DateTime.Now.Ticks.ToString() + "_" + fileName;
                FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Backstage/UploadImageTemp/" + fileName));//上传文件本地服务器
                UploadFile(Server.MapPath("~/Backstage/UploadImageTemp/" + fileName));
            }
            else
            {
                MyClass.ShowMessage(this.Page, "未选择图片!");
            }
        }


        private string UploadFile(string fileNamePath)
        {
            
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileNamePath);
            if (!fileInfo.Exists)
            {
                MyClass.ShowMessage(this.Page, "文件不存在!");
                return "";
            }

            // 要上传的文件 
            FileStream fs = fileInfo.OpenRead();
            BinaryReader BinaryReaderTemp = new BinaryReader(fs);

            //时间戳 
            string strBoundary = "---------" + DateTime.Now.Ticks.ToString("x");
            //上传URL ,这里因为是apicloud所以写死,如果是上传到其他,可以修改
            HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri("http://d.apicloud.com/mcm/api/file"));
            httpReq.Timeout = timeout;
            httpReq.ReadWriteTimeout = readWriteTimeout;
            httpReq.Method = "POST";
            httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
            httpReq.Headers.Add("X-APICloud-AppId", ****);//输入你的appid
            httpReq.Headers.Add("X-APICloud-AppKey", ****);//输入你的appkey(SHA1加密后)
            FileSendObj fso = new FileSendObj();
            try
            {
                //请求头部信息 
                StringBuilder sbPostHeader = new StringBuilder();
                sbPostHeader.Append("--" + strBoundary);
                sbPostHeader.Append("\r\n");
                sbPostHeader.Append("Content-Disposition: form-data; name=\"file\"; filename=\"" + fileInfo.Name + "\"");//新文件名
                sbPostHeader.Append("\r\n");
                sbPostHeader.Append("Content-Type: " + GetMimeType(fileInfo.Name));//文件类型 text/plain  image/jpeg 或者其他
                sbPostHeader.Append("\r\n");
                sbPostHeader.Append("\r\n");
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(sbPostHeader.ToString());
                Stream postStream = httpReq.GetRequestStream();
                fso.connection = true;
                fso.totalBytes = fs.Length;//数据总大小
                //发送请求头部消息 
                postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);

                //已上传的字节数 
                long offset = 0;
                int size = 0;
                //每次上传1k 
                byte[] buffer = new byte[1024];
                do
                {
                    size = BinaryReaderTemp.Read(buffer, 0, buffer.Length);
                    if (size <= 0 && offset <= 0)
                    {
                        fso.connection = false;
                        //ShowDownloadedInfo(fso);//可以回调进度
                        break;
                    }
                    offset += size;
                    postStream.Write(buffer, 0, size);
                    //ShowDownloadedInfo(fso);//可以回调进度
                } while (size > 0);
                //添加尾部的时间戳 
                byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "\r\n");
                postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
                postStream.Close();

                //获取服务器端的响应 
                WebResponse webRespon = httpReq.GetResponse();
                Stream s = webRespon.GetResponseStream();
                StreamReader sr = new StreamReader(s);

                //读取服务器端返回的消息 
                MyClass.ShowMessage(this.Page, "上传成功!");
                String sReturnString = sr.ReadToEnd();
                JObject o = JObject.Parse(sReturnString);
                Recipe_ImageUrl.ImageUrl = (o.SelectToken("url")).ToString();
                s.Close();
                sr.Close();

                return sReturnString;
            }
            catch
            {
                fso.connection = false;
                //ShowDownloadedInfo(fso);//可以回调进度
                return "";
            }
            finally
            {
                fs.Close();
                BinaryReaderTemp.Close();
            }
        }

        public static string GetMimeType(string fileName)
        {//访问注册表获取的
            string mimeType = "application/unknown";
            string ext = Path.GetExtension(fileName).ToLower();
            Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext);
            if (regKey != null && regKey.GetValue("Content Type") != null)
            {
                mimeType = regKey.GetValue("Content Type").ToString();
            }
            return mimeType;
        }
        class FileSendObj
        {
            /// <summary>
            /// 文件总大小
            /// </summary>
            public long totalBytes = 0;
            /// <summary>
            /// 文件已下载多少
            /// </summary>
            public long totalDownloadedByte = 0;
            /// <summary>
            /// 连接是否成功
            /// </summary>
            public bool connection = false;
        }

猜你喜欢

转载自blog.csdn.net/qq_36171451/article/details/82790322