首页新闻找找看学习计划

图片上传保存到其他网站

0
悬赏园豆:15 [已解决问题] 解决于 2014-04-22 09:44

类似博客园头像上传的时候,把图片保存到http://pic.cnitblog.com/avatar/下。1,是怎么实现的啊,,用WebServise或wcf来实现吗?2,图片上传时保存路径怎么设置呢?像我在http://home.cnblogs.com/set/avatar/这里上传,保存到http://pic.cnitblog.com/avatar/这个里面。这个中间的操作不是很明白。谁能解释一下啊?先谢谢了

问题补充:

我们网站现在有手机端,pc端,想把用户上传图片保存到另一个网站下面,这样都能实现上传和下载。不清楚怎么解决?

这个应该属于使用独立服务器来保存图片。大致上已经有了思路,具体实现还得看看。谢谢各位了。

单恋的主页 单恋 | 小虾三级 | 园豆:678
提问于:2014-04-21 20:38
< >
分享
最佳答案
0

可以用wcf或webservice实现,下面是以前写的一个代码webservice的,思路是将文件流转换成byte[]的形式在网络上传送,

接收方再将byte[]使用FileStream写入文件,注意上传文件大小有限制,所以并不完美。希望对你有帮助。

        [WebMethod]
        public bool AddAssistSpeech(AssistSpeech assistSpeech, string fileName, byte[] fileStream, out string msg)
        {
            try
                {
                    // 上传文件
                    assistSpeech.AudioPath = (new AssistSpeechAudioFileHelper()).Upload(fileName, fileStream);
                    // 保存数据库等其他操作为返回结果result和输出信息msg赋值
…… return result; } catch (Exception ex) { Loger.LogErr(ex); msg = ex.Message; return false; } }

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;

namespace Xinbohit.Com.CommonWebService.Classes
{
    class AssistSpeechAudioFileHelper
    {
        /// <summary>
        /// 上传文件,返回相对路径以便存库
        /// </summary>
        /// <param name="fileName">源文件名</param>
        /// <param name="fileStream">文件数据流</param>
        /// <returns></returns>
        public string Upload(string fileName, byte[] fileStream)
        {
            DateTime now = DateTime.Now;
            string relativepath = Path.Combine(now.ToString("yyyyMMdd"), now.ToString("yyyyMMddhhmmssfff") + Path.GetExtension(fileName));
            string basePath = GetBasePath();

            string savePath = Path.Combine(basePath, relativepath);
            string saveDir = Path.GetDirectoryName(savePath);
            if (!Directory.Exists(saveDir))
            {
                Directory.CreateDirectory(saveDir);
            }

            using (FileStream stream = new FileStream(savePath, FileMode.Create))
            {
                stream.Write(fileStream, 0, fileStream.Length);
                stream.Flush();
            }

            return relativepath;
        }

        /// <summary>
        /// 下载音频文件
        /// </summary>
        /// <param name="fileNameRelativepath"></param>
        /// <returns></returns>
        public byte[] DownLoad(string fileNameRelativepath, out string msg)
        {
            string basePath = GetBasePath();
            string filePath = Path.Combine(basePath, fileNameRelativepath);
            if (File.Exists(filePath))
            {
                byte[] result;

                using (FileStream stream = new FileStream(filePath, FileMode.Open))
                {
                    long length = stream.Length;
                    result = new byte[length];

                    long bytesToRead = length;
                    int buffer = 1024;
                    int offset = 0;
                    int byteNum = 0;

                    while (bytesToRead > 0)
                    {
                        if (buffer < bytesToRead)
                        {
                            byteNum = stream.Read(result, offset, buffer);
                        }
                        else
                        {
                            byteNum = stream.Read(result, offset, (int)bytesToRead);
                        }

                        if (byteNum == 0)
                        {
                            break;
                        }

                        offset += byteNum;
                        bytesToRead -= byteNum;
                    }
                }
                msg = string.Empty;
                return result;
            }
            else
            {
                msg = "文件不存在。";
                return new byte[0];
            }
        }

        private string GetBasePath()
        {
            string basePath = System.Configuration.ConfigurationManager.AppSettings["AudioFileBasePath"];

            if (!Directory.Exists(basePath))
            {
                Directory.CreateDirectory(basePath);
            }

            return basePath;
        }
    }
}
收获园豆:5
于为源 | 小虾三级 |园豆:984 | 2014-04-22 08:46
其他回答(4)
0

1.上传的图片的代码就不写了。自己百度一下就有了。2.应该是可以直接利用WebServise。先判断http://pic.cnitblog.com/avatar/是否已存在这样的图片,没有就上传。

收获园豆:5
纵一苇之所如- | 园豆:185 (初学一级) | 2014-04-21 20:52
0

上传到一个服务器的文件夹下,然后在数据库里记录下来再告诉别人路径不就OK了?前台的url请求地址不代表后台的存储方式吧

收获园豆:3
zl_说不得 | 园豆:33 (初学一级) | 2014-04-21 23:26
0
收获园豆:2
geass.. | 园豆:1737 (小虾三级) | 2014-04-22 09:30
0

想把用户上传图片保存到另一个网站下面,这个完全不用保存到另一个网站啊,保存到当前网站下面,用户在另一个网站访问图片时路径就是 当前网站域名+图片路径

程序新青年 | 园豆:841 (小虾三级) | 2014-06-17 10:40

这个已经解决了,就是添加一个图片服务器。还是谢谢了

支持(0) 反对(0) 单恋 | 园豆:678 (小虾三级) | 2014-06-17 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册