|
本帖最后由 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);
}
}
}
}
|
|