簡體   English   中英

使用mvc4在.net服務器上保存文件時更改名稱

[英]Change The name While saving the File on .net server using mvc4

我想使用google設備將其上傳到我使用android設備的服務器上的圖像,並在下面找到了代碼

public async Task<HttpResponseMessage> PostFile()
{
    // Check if the request contains multipart/form-data.
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    //string root = HttpContext.Current.Server.MapPath("~/App_Data");
    string root = HttpContext.Current.Server.MapPath("~/Files");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        StringBuilder sb = new StringBuilder(); // Holds the response body

        // Read the form data and return an async task.
        await Request.Content.ReadAsMultipartAsync(provider);

        // This illustrates how to get the form data.
        foreach (var key in provider.FormData.AllKeys)
        {
           // Trace.WriteLine(key.Headers.ContentDisposition.FileName);
            foreach (var val in provider.FormData.GetValues(key))
            {
                sb.Append(string.Format("{0}: {1}\n", key, val));
            }
        }

        // This illustrates how to get the file names for uploaded files.
        foreach (var file in provider.FileData)
        {
            FileInfo fileInfo = new FileInfo(file.LocalFileName);
            sb.Append(string.Format("Uploaded file: {0} ({1} bytes)\n", fileInfo.Name, fileInfo.Length));
        }
        return new HttpResponseMessage()
        {
            Content = new StringContent(sb.ToString())
        };
    }
    catch(System.Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }
}

此代碼工作正常,當我從android手機發送文件時,將其保存在服務器指定的文件夾中,但是現在的問題是,當我嘗試從其他手機訪問文件時,它不顯示內容,為什么? 找不到內容是由於當此代碼將文件保存在我的服務器上時,它會更改其原始名稱,並用這樣的名稱替換

BodyPart_2ce1d675-31f6-41ec-8cdd-595fea6af0e3

並從中刪除其擴展名,以便為什么無法訪問它,但是如果我在服務器上重命名此文件並向其添加擴展名(而不是其可訪問性),則代替它,這里的意思是,有什么方法可以在其上存儲文件名稱為plus(+)擴展名的服務器使用此代碼進行了一些小的修改。

在此先感謝您的幫助。

您可以擴展MultipartFormDataStreamProvider類,以定義自己的文件命名邏輯,如下所示:

using System.Net.Http;
using System.Net.Http.Headers;

...

public class CustomMultipartFormDataStreamProvider 
    : MultipartFormDataStreamProvider
{
    public CustomMultipartFormDataStreamProvider(string path) 
        : base(path)
    {
    }

    public override string GetLocalFileName(HttpContentHeaders headers)
    {
        return headers.ContentDisposition.FileName.Replace("\"", string.Empty);
    }
}

現在替換CustomMultipartFormDataStreamProvider以便

var provider = new MultipartFormDataStreamProvider(root);

變成

var provider = new CustomMultipartFormDataStreamProvider (root);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM