0

私はasp.netmvcwebapiに取り組んでいます。次のような投稿リクエストで画像をアップロードしようとしています。

<form action="/api/mypictures/12" method="post" enctype="multipart/form-data">
        <label for="somefile">File</label>
        <input name="somefile" type="file" />
        <input type="submit" value="Submit" />
    </form>

私は次の手順に従いました、

[HttpPost]
        public HttpResponseMessage AddImage(HttpRequestMessage request, int id)
        {
            try
            {
                if (!request.Content.IsMimeMultipartContent("form-data"))
                {
                    return request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, new HttpError() { { "status", "failed" }, { "message", "Invalid file format" } });
                }
                else
                {
                    string PATH = HttpContext.Current.Server.MapPath("~/App_Data/");
                    var streamProvider = new CustomMultipartFormDataStreamProvider(PATH);
                    var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(
                        t =>
                        {
                            if (t.IsFaulted || t.IsCanceled)
                                throw new HttpResponseException(HttpStatusCode.InternalServerError);
                        }
                    );
                    Photo photo = new Photo();
                    photo.Id = id;
                    **photo.Image = "Image that uploaded recently";**
                    photo.IsUserAllowed = true;
                    if (barrepository.AddImage(photo) == 1)
                    {
                        return request.CreateErrorResponse(HttpStatusCode.OK, new HttpError() { { "status", "success" }, { "message", "file uploaded successfully" } });
                    }
                    else
                    {
                        return request.CreateErrorResponse(HttpStatusCode.OK, new HttpError() { { "status", "success" }, { "message", "unable to store the image into database" } });
                    }
                }
            }
            catch(Exception ex)
            {
                return request.CreateErrorResponse(HttpStatusCode.InternalServerError, new HttpError() { { "status", "failed" }, { "message", ex.Message } });
            }
        }

私のCustomMultipartFormDataStreamProviderクラスは、

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

        public override string GetLocalFileName(System.Net.Http.Headers.HttpContentHeaders headers)
        {
            var name = !string.IsNullOrWhiteSpace(headers.ContentDisposition.FileName) ? DateTime.Now.ToString("MM-dd-yyyy-hh-mm-ss")+"_"+headers.ContentDisposition.FileName : "NoName";
            return name.Replace("\"", string.Empty); 
        }
    }

上記の手順で、ファイルが上記のフォルダに適切に保存されます。しかし、画像のアップロードが成功した後、アップロードしたファイル名をデータベーステーブルに保存する必要があります。アップロードが成功した後、投稿されたファイルのファイル名を取得するにはどうすればよいですか。案内してください。

4

1 に答える 1

0

次のようなファイル名を取得できます。

var task = Request.Content.ReadAsMultipartAsync(streamProvider).ContinueWith(
                    t =>
                    {
                        if (t.IsFaulted || t.IsCanceled)
                            throw new HttpResponseException(HttpStatusCode.InternalServerError);


            CustomMultipartFormDataStreamProvider resultProvider = t.Result;
            string fileName = t.FileData.First().LocalFileName;
                    }
                );
于 2012-11-28T18:15:41.783 に答える