通过本地文件路径上载文件

File-Upload via local file path

本文关键字:文件 路径 上载      更新时间:2023-09-26

有没有一种方法可以通过文件路径上传文件?

默认的HTML文件上载控件显示一个禁用的文本框和一个按钮。当用户将文件的路径粘贴到文本框中时,是否可以通过JS或其他方式上传文件?

此网页位于公司内部网中。

不,在使用普通HTML/JavaScript的web应用程序中,这是不可能的。

用户选择文件的唯一方法是通过单击<input type="file" />元素的浏览按钮打开文件对话框。

唯一可能的快捷方式是JS可以自动打开文件对话框,但这仍然是用户选择上传什么文件的唯一方式。

在可信网络中有一些小的可能性。不完全相同,但仍然是一个非常相似的问题:使用javascript 访问本地文件

我已经在电子应用中使用以下代码完成了文件上传

  if (window.FormData !== undefined) {
              var formData = new FormData();
              let response = await fetch(path); // give local file path stored at appdata folder
              let data = await response.blob();          
              formData.append("file", new File([data], "YourfileName"))
              let _url = "api/webservice url";
              $.ajax({
                type: "POST",
                url: _url,
                contentType: false,
                processData: false,
                data: formData,
                success: function (result) {              
                  console.log(result);
                },
                error: function (xhr, status, p3, p4) {                  
                  var err = "Error " + " " + status + " " + p3 + " " + p4;
                  if (xhr.responseText && xhr.responseText[0] == "{")
                    err = JSON.parse(xhr.responseText).Message;
                  console.log(err);
                }
              });
            } else {
              alert("This browser doesn't support HTML5 file uploads!");
            }

在服务器端(C#代码(

var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
    
// extract file name and file contents
var fileNameParam = provider.Contents[0].Headers.ContentDisposition.Parameters
                    .FirstOrDefault(p => p.Name.ToLower() == "filename");
string fileName = (fileNameParam == null) ? "" : ileNameParam.Value.Trim('"');
var divs = fileName.Split('.').ToList();
var ext = divs.LastOrDefault();
byte[] file = await provider.Contents[0].ReadAsByteArrayAsync();
// Here you can use EF with an entity with a byte[] property, or
// an stored procedure with a varbinary parameter to insert the
// data into the DB
var fileVM = new FileViewModel
{
 AttachmentType = AttachmentTypeEnum.File,
 FileName = fileName,
 FileExtension = ext,
 ContentType = MimeMapping.GetMimeMapping(fileName),
 ContentLength = file.Length,
 ContentByte = file,
};