7

Web サイトに管理パネルがあり、ユーザーは画像をファイル システムにアップロードできます。私は単にC#コードでやっています:

imageFile.SaveAs(galleryPath + fileName); 

ただし、アクセス許可の例外が発生します:

パス「D:\Hosting...\html\Images\Gallery\page2-img1.jpg」へのアクセスが拒否されました。

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。例外の詳細: System.UnauthorizedAccessException: パス 'D:\Hosting...\html\Images\Gallery\page2-img1.jpg' へのアクセスが拒否されました。

アクセス許可を付与する方法を教えてください。

4

4 に答える 4

2

このトラブルシューティングの記事を読んでください。そこに解決策があります。それがうまくいかない場合は、サポートに連絡してください;)

http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts

ところで、フォルダーとファイル名を連結するときに Path.Combine を使用することをお勧めします

imagefile.SaveAs(System.IO.Path.Combine(galleryPath, fileName));
于 2013-10-20T17:17:22.387 に答える
1

みんな、ありがとう。フォルダーのアクセス許可を読み取り/書き込みに変更する必要がありました。デフォルトでは読み取り専用です。

詳細はこちら: http://support.godaddy.com/help/article/6481/setting-directory-permissions-with-windows-hosting-accounts

于 2013-10-21T09:50:01.383 に答える
0

わかりました、これは私の見解です

    @using (Html.BeginForm("Upload", "Pictures", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()
    <div>
    Title:<br/>
    @Html.EditorFor(x => x.Title)<br/>
    @Html.ValidationMessageFor(x => x.Title)<br/>
    @Html.TextBoxFor(x => x.File, new { 
    type = "file"
    })<br/> 
    @Html.ValidationMessageFor(x => x.File)<br/> 
    Description:<br/>
    @Html.TextAreaFor(x => x.Description)<br/>
    @Html.ValidationMessageFor(x => x.Description)
    </div>
    <div style="clear:both"></div>
    <p><input type="submit" value="Save"/></p>
}

これは私のビューモデルです

public class UploadModel
    {
        [Required(ErrorMessage=("You have not selected a file"))]
        public HttpPostedFileBase File { get; set; }
        [Required(ErrorMessage = "Please enter a title")]
        [StringLength(50)]
        public string Title { get; set; }
        [StringLength(400)]
        public string Description { get; set; }
    }

これが私のコントローラ アクションです。

    [Authorize(Roles = "Approved")]
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Upload(UploadModel m)
    {
        byte[] uploadedFile = null;
        Byte123 xxx = new Byte123();
        if (m.File != null && !string.IsNullOrEmpty(m.Title))
        {
            //var fileName = System.IO.Path.GetFileName(m.File.FileName);
            //string c = m.File.FileName.Substring(m.File.FileName.LastIndexOf("."));
           // m.Title = m.Title.Replace(c, "");
            uploadedFile = new byte[m.File.InputStream.Length]; //you get the image as byte here but you can also save it to file.

これは MVC コードです。Web フォームを使用している場合は、コードを短くする必要があります。リンクからこれを取得しましたが、今は見つからないため、独自のコードを投稿しました。また、Cpanel を使用して、ホストで書き込み権限が有効になっていることを確認する必要があります。

于 2013-10-20T10:55:26.653 に答える