【问题标题】:why is the image icon blank/white when fileupload.saveas为什么fileupload.saveas时图像图标为空白/白色
【发布时间】:2012-01-30 09:16:21
【问题描述】:

我使用 vb.net

我正在尝试进行文件上传,我想将图像保存到图像文件夹,但是,图像不知道出现在我指定的目录中

如果我点击“显示所有文件”,图像会出现,但图像图标是空白或白色,如下图所示

所以我点击该图片并点击“将其包含在项目中”,但是,我不应该每次上传图片,我需要再次重做

那么当我上传图片而不是手动点击要包含的图片时,我应该如何允许不出现白色图标并始终出现在上传文件夹中?

这是我的代码

 Protected Sub uploadImage()
    Dim filename As String = FileUploadImg.FileName
    Dim fileType As String = filename.Substring(filename.Length - 4).ToLower()
    If (fileType = ".gif") Or (fileType = ".jpg") Or (fileType = ".png") Then
        FileUploadImg.SaveAs("C:\Users\Jane\Desktop\project\FileUpload\FileUpload\WebRole1\images\" & txtboxName.Text & "_" & FileUploadImg.FileName)
    Else
        MsgBox("failed")

    End If
End Sub

Protected Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
       uploadImage()

        'End If
    End Sub

这是它的样子

【问题讨论】:

    标签: asp.net vb.net image file-upload


    【解决方案1】:

    您必须将发布的文件保存到 Web 服务器上的持久存储中,并将文件映射到某个 URL,以便可以从 Internet 访问它们。

    在 Azure 环境中,本地磁盘(如 c:)没有持久化(想象多个网络角色 - 你怎么能从其他实例提供相同的图像)。

    解决方案是 Azure Blob 存储(您必须在 Azure 管理控制台中set-up 它)并将发布的文件上传到 Blob 存储容器。

    // Setup the connection to Windows Azure Storage
    var storageAccount = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
    var blobClient = storageAccount.CreateCloudBlobClient();
    
    // Get and create the container
    var blobContainer = blobClient.GetContainerReference("public-images");
    blobContainer.CreateIfNotExist();
    
        // Allow blob to be downloaded
        containerPermissions = new BlobContainerPermissions();
        containerPermissions.PublicAccess = BlobContainerPublicAccessType.Blob;
        blobContainer.SetPermissions(containerPermissions);
    
    // Get the target blob reference
    var blobAddressUri = String.Format("{0}{1}", fileName); //create random fileName here
    var blob = BlobContainer.GetBlobReference(blobAddressUri);
    
    // Set blob Content-Type
    blob.Properties.ContentType = FileUploadImg.PostedFile.ContentType ;
    
    // Upload to the blob storage account
    blob.UploadFromStream(FileUploadImg.FileContent);
    

    您的文件现在可以通过blob.Uri 获得。

    【讨论】:

    • bt 我还没有使用 blob 存储...我将它保存在 webrole 项目图像文件夹中
    • 如果您在 Azure 中,则必须使用 blob 存储 - 您只是花时间测试非 Azure 兼容的解决方案。无论如何要回答您的问题-在保存文件时使用 Server.MapPath 方法-使用此方法,您可以获得 url 可访问路径。
    • 我没有帐户,所以我只想上传到创建的项目下的文件夹中,我的问题是每当我上传时,它都不会显示文件夹中的图像,但是如果我单击“显示所有文件”它显示图像但图标为空或白色,这是怎么回事?怎么改?
    • 用户生成的内容不能成为项目的一部分。应该使用 MapPath 将其保存到本地文件夹(请参阅 Eddie 的回答)。您的图像可通过相对 url 访问(如 images/pi1.png)。绝对 url 可以用 ResolveUrl 解析。见msdn.microsoft.com/en-us/library/…
    • 那为什么图片不存在呢?为什么它是空的或白色的图标?
    【解决方案2】:

    您必须指定放置上传文件的目录。例如,如果我在 C:\Website1 中创建一个新项目,则目录将是 C:\Website1。然后我会在下面创建一个目录来存储上传:C:\Website1\uploads 并确保为 IIS 帐户设置读/写权限。然后我会这样做:

    string uploadPath = MapPath( "pictures\\" );
    this.fileUpload1.SaveAs( uploadPath + this.fileUpload1.FileName );
    

    文件进入上传目录后,我可以将其移动到任何我喜欢的地方。

    【讨论】:

    • 不是和我做的一样吗? IIS 帐户的 se 读/写权限是什么意思...但是如何?
    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    相关资源
    最近更新 更多