代码之家  ›  专栏  ›  技术社区  ›  ursaciuc

使用Node js和electron上传图像。(从c代码转换)

  •  1
  • ursaciuc  · 技术社区  · 7 年前

    我正在将一个应用程序从c#转换为electron,当我试图请求在服务器(而不是我的服务器)上上载图像时,我遇到了一些问题。

    对于c#来说,我使用了RestSharp库,一切都很好。

        private void UploadImage(string id)
        {
            RestClient client = new RestClient("https://www.website.com")
            {
                CookieContainer = new CookieContainer()
            };
            string path = @"D:\Downloads\image.jpg";
    
            var request = new RestRequest("/upload?id=" + id, Method.POST);
            request.AddFile("myfile", File.ReadAllBytes(path), Path.GetFileName(path), "image/jpeg");
    
            request.AddHeader("Content-type", "application/json");
            request.AddHeader("Accept", "application/json");
            request.RequestFormat = DataFormat.Json;
    
            client.Execute(request);
        }
    

    如何在Node js中转换此代码?我唯一能找到的就是上传到他们自己服务器上的代码,而这对我来说并不适用。

    这是我在Node js中尝试的

    var fs = require('fs');
        var request = require('request');
        fs.createReadStream("D:\Downloads\image.jpg").pipe(request.post("https://www.website.com/upload?id=" + productId, function (error, response, body) {
            if (error) {
                console.log(error);
            } else {
                console.log(response);
            }
        }));
    

    使用上面的代码,我得到状态代码200,身体反应告诉我没有选择图像。因此,请求可以正常工作,但发送图像无法正常工作。

    2 回复  |  直到 7 年前
        1
  •  1
  •   ursaciuc    7 年前

    这就是我为了解决这个问题所做的。也许它也会帮助别人。

    var fs = require('fs');
    var request = require('request');
    
    var req = request.post(uploadURL, function (err, resp, body) {
        if (err) {
          console.log('Error!');
        } else {
          console.log('URL: ' + body);
        }
      });
      var form = req.form();
      form.append('myfile', fs.createReadStream("path\to\image.jpg"), {
        filename: "image.jpg",
        contentType: 'image/jpeg'
      });
    
        2
  •  1
  •   chrsmrtn81    6 年前

    我一直在尝试使用相同的技术,使用Electron将文件上载到本地主机测试服务器,但没有成功。我的代码在控制台中返回为成功,但从未上载任何文件。这是你遇到的问题吗,或者你能看到我在做什么不同的事情吗?

    const fs = require('fs');
    const request = require('request');
    
    var uploadURL = 'http://localhost:80/sandbox/img';
    
    var req = request.post(uploadURL, function (err, resp, body) {
        if (err) {
            console.log(err);
        } else {
            console.log(body);
        }
    });
    
    var form = req.form();
    
    form.append('upload', fs.createReadStream("C:/nodejs/dave/assets/img/brand_logos/logo.jpg"), {
        filename: "logo.jpg",
        contentType: 'image/jpeg'
    });
    

    下面是我得到的回复,我假设这是预期的。。。

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>301 Moved Permanently</title>
    </head><body>
    <h1>Moved Permanently</h1>
    <p>The document has moved <a href="http://localhost/sandbox/img/">here</a>.</p>
    <hr>
    <address>Apache/2.4.27 (Win64) PHP/7.0.23 Server at localhost Port 80</address>
    </body></html>