起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3059|回复: 12

[结贴] attachmentSimple .net 服务环境下失效?!请问解决办法

[复制链接]

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
发表于 2017-6-30 15:35:24 | 显示全部楼层 |阅读模式
本帖最后由 tt20108 于 2017-7-2 22:54 编辑

attachmentSimple .net 服务环境下失效?!请问解决办法
请结帖 花了点时间已经自己解决  SimpleFileStore.cs 修正代码

using System;
using System.IO;
using System.Text;
using System.Web;
using com.justep.baas.action;
using Newtonsoft.Json.Linq;
using System.Collections;
using System.Collections.Generic;
using System.Web.SessionState;

using System.Text.RegularExpressions;

namespace justep
{
    using JSONObject = JObject;

    public class SimpleFileStore
    {
        static string docStorePath;

        static readonly string separator = "/";

        public static JSONObject service(JSONObject paramObject, ActionContext context)
        {




            var request = (HttpRequest)context.Get(ActionContext.REQUEST);
            var response = (HttpResponse)context.Get(ActionContext.RESPONSE);
            //String baasPath = Environment.CurrentDirectory + ".." + separator + "..";
            String baasPath = request.MapPath("~\\");
            docStorePath = baasPath + separator + "data" + separator + "attachmentSimple";
            if (request.HttpMethod == "GET")
            {
                DoGet(request, response);

            }
            else if (request.HttpMethod == "POST")
            {
                DoPost(request, response);
            }


            return null;
        }

        /// <summary>
        /// get为获取文件 浏览或者下载
        /// </summary>
        /// <param name="request">Http request</param>
        /// <param name="response">Http response</param>
        private static void DoGet(HttpRequest request, HttpResponse response)
        {

            string operateType = request.Params["operateType"];
            if ("copy" == operateType)
            {
                CopyFile(request, response);
            }
            else {

                GetFile(request, response);
            }
        }

        /// <summary>
        //
        /// post为上传
        /// </summary>
        /// <param name="request"></param>
        /// <param name="response"></param>
        protected static void DoPost(HttpRequest request, HttpResponse response)
        {


            var contentType = request.ContentType;
            try
            {
                if ("application/octet-stream" == contentType)
                {
                    StoreOctStreamFile(request, response);
                  //  StoreFile(request, response);
                }
                else if (!string.IsNullOrEmpty(contentType) && contentType.StartsWith("multipart/"))
                {

                    StoreFile(request, response);
                }
                else {
                  //  throw new Exception("not supported contentType");
                }
            }
            catch (Exception e)
            {
               // throw new IOException("storeFile异常" + e.Message);
            }
            response.Write("");
        }

        private static void CopyFile(HttpRequest request, HttpResponse response)
        {

            var ownerId = request.Params["ownerID"];
            var targetOwnerId = request.Params["targetOwnerID"];
            var storeFileName = request.Params["storeFileName"];
            var file = docStorePath + separator + ownerId + separator + storeFileName;
            var targetFile = docStorePath + separator + targetOwnerId + separator + storeFileName;
            File.Copy(file, targetFile, false);
        }

        private static void GetFile(HttpRequest request, HttpResponse response)
        {
            int BUFFER_SIZE = 32768 * 8;

            var ownerId = request.Params["ownerID"];
            var realFileName = HttpUtility.UrlEncode(request.Params["realFileName"], Encoding.UTF8);
            var storeFileName = request.Params["storeFileName"];
            var operateType = request.Params["operateType"];
            /*String fileSize = request.getParameter("fileSize");*/

           // var fis = new FileStream(docStorePath + separator + ownerId + separator + realFileName, FileMode.Open);

            /*response.setContentType(mimeType);*/
            /*response.setHeader("Content-Length", String.valueOf(part.getSize()));*/
          //  response.Headers.Set("Cache-Control", "pre-check=0, post-check=0, max-age=0");

           // var fileNameKey = "filename";
            /*UserAgent ua = com.justep.ui.util.NetUtils.getUserAgent(request);
            if(Browser.FIREFOX.equals(ua.getBrowser().getGroup())){
                fileNameKey = "filename*";
            }*/
            if ("download" == operateType)
            {
                //  response.Headers.Add("Content-Disposition", "attachment; " + fileNameKey + "=\"" + realFileName + "\"");

                ToDownload(docStorePath + separator + ownerId + separator + realFileName, realFileName);
            }
            else {

                ToOpen(docStorePath + separator + ownerId + separator + realFileName, realFileName);
               // response.AddHeader("Content-Disposition", "inline; " + fileNameKey + "=\"" + realFileName + "\"");
            }

            //var os = response.OutputStream;
            //byte[] buffer = new byte[BUFFER_SIZE];
            //try
            //{
            //    int read;
            //    while ((read = fis.Read(buffer, 0, BUFFER_SIZE)) != -1)
            //    {
            //        os.Write(buffer, 0, read);
            //    }
            //}
            //finally
            //{
            //    fis.Close();
            //}
        }

        public static void ToDownload(string serverfilpath, string filename)

        {

            FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);

            long fileSize = fileStream.Length;

            HttpContext.Current.Response.ContentType = "application/octet-stream";
            HttpContext.Current.Response.Headers.Set("Cache-Control", "pre-check=0, post-check=0, max-age=0");
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UTF_FileName(filename) + "\";");

            ////attachment --- 作为附件下载

            ////inline --- 在线打开

            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());

            byte[] fileBuffer = new byte[fileSize];

            fileStream.Read(fileBuffer, 0, (int)fileSize);

            HttpContext.Current.Response.BinaryWrite(fileBuffer);

            fileStream.Close();

            HttpContext.Current.Response.End();


        }
        public static void ToOpen(string serverfilpath, string filename)

        {

            FileStream fileStream = new FileStream(serverfilpath, FileMode.Open);

            long fileSize = fileStream.Length;

            HttpContext.Current.Response.ContentType = "application/octet-stream";

            HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UTF_FileName(filename) + "\";");
            HttpContext.Current.Response.Headers.Set("Cache-Control", "pre-check=0, post-check=0, max-age=0");
            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());

            byte[] fileBuffer = new byte[fileSize];

            fileStream.Read(fileBuffer, 0, (int)fileSize);

            HttpContext.Current.Response.BinaryWrite(fileBuffer);

            fileStream.Close();

            HttpContext.Current.Response.End();

        }
        private static string UTF_FileName(string filename)

        {

            return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);

        }

        private static void StoreOctStreamFile(HttpRequest request, HttpResponse response)
        {
            FileStream storeStream = null;
            Stream inputStream = null;
            try
            {
                var ownerId = request.Params["ownerID"];
                var storeFileName = request.Params["storeFileName"];
                inputStream = request.InputStream;
                var storePath = docStorePath + separator + ownerId;
                Directory.CreateDirectory(storePath);
                using (storeStream = new FileStream(storePath + separator + storeFileName, FileMode.OpenOrCreate))
                {
                    inputStream.CopyTo(storeStream);
                }
            }
            finally
            {
                inputStream?.Close();
                storeStream?.Close();
            }
        }

        private static void StoreFile(HttpRequest request, HttpResponse response)
        {
            HttpFileCollection items = request.Files;
           // String TempFileName;
            var storePath = docStorePath + separator + request.Params["ownerID"];
            if (!Directory.Exists(storePath))
            {
                Directory.CreateDirectory(storePath);
            }
            //items.SaveAs(storePath + separator + items.FileName);
          //  foreach (HttpPostedFile iter in items)
          //  {
           //     iter.SaveAs(storePath + separator + iter.FileName);
          //  }
            for (int Loop1 = 0; Loop1 < items.Count; Loop1++)
            {
                // Create a new file name.
               // TempFileName = "C:\\inetpub\\wwwroot\\data\\attachmentSimple\\File_" + Loop1.ToString();
                // Save the file.
                items[Loop1].SaveAs(storePath + separator + items[Loop1].FileName);
            }

        }
    }
}


发表于 2017-6-30 18:10:59 | 显示全部楼层
.net 的baasServer 运行是正常的吗??

attachmentSimple 的actionUrl 属性设置的是baasServer 的地址吧!

如果是!只要baasServer 启动是正常的!就没问题!可以先把外卖案例运行跑通了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
 楼主| 发表于 2017-7-1 09:33:38 | 显示全部楼层
liangyongfei 发表于 2017-6-30 18:10
.net 的baasServer 运行是正常的吗??

attachmentSimple 的actionUrl 属性设置的是baasServer 的地址吧! ...

运行正常 就是不能传附件
回复 支持 反对

使用道具 举报

发表于 2017-7-1 10:31:55 | 显示全部楼层
tt20108 发表于 2017-7-1 09:33
运行正常 就是不能传附件

有什么报错信息??  看下网络请求!有没有发生baasServer的请求呢?

服务器日志,有没有报错信息
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
 楼主| 发表于 2017-7-1 11:13:13 | 显示全部楼层
liangyongfei 发表于 2017-7-1 10:31
有什么报错信息??  看下网络请求!有没有发生baasServer的请求呢?

服务器日志,有没有报错信息 ...

使用这个/baas/justep/attachment/simpleFileStore  会出现500错误
POST http://localhost:8080/baas/justep/attachment/simpleFileStore 500 (Internal Server Error)

在本地测试 使用这个成功 $UI/system/service/doc/common/simpleFileStore.j  就是不知道能不能 在服务端是 .net 的情况下直接打包
回复 支持 反对

使用道具 举报

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
 楼主| 发表于 2017-7-1 11:24:23 | 显示全部楼层
$UI/system/service/doc/common/simpleFileStore.j  在打包环境下不能成功
回复 支持 反对

使用道具 举报

发表于 2017-7-1 11:39:05 | 显示全部楼层
tt20108 发表于 2017-7-1 11:24
$UI/system/service/doc/common/simpleFileStore.j  在打包环境下不能成功

simpleFileStore.j  是运行UIServer ,最终是执行的java代码!
你是.net 怎么访问java服务器呢??请换成baasServer   .net的baas
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
 楼主| 发表于 2017-7-1 11:42:50 | 显示全部楼层
liangyongfei 发表于 2017-7-1 11:39
simpleFileStore.j  是运行UIServer ,最终是执行的java代码!
你是.net 怎么访问java服务器呢??请换成 ...

但是 baasServer   .net的baas 不能上传直接报错
回复 支持 反对

使用道具 举报

发表于 2017-7-1 14:36:42 | 显示全部楼层
tt20108 发表于 2017-7-1 11:42
但是 baasServer   .net的baas 不能上传直接报错

报什么错啊?baasServer  编译正常吗?
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

29

主题

72

帖子

192

积分

初级会员

Rank: 2

积分
192
QQ
 楼主| 发表于 2017-7-1 15:45:51 | 显示全部楼层
liangyongfei 发表于 2017-7-1 14:36
报什么错啊?baasServer  编译正常吗?

编译正确  我都没改过源码直接是原版的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-12 21:46 , Processed in 0.110373 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表