生成多部分边界

Aug*_*aas 36 multipart

我正在编写一个脚本,将文件上传到需要多部分请求的cgi脚本,例如HTML页面上的表单.这boundary是一个唯一标记,用于注释请求正文中的文件内容.这是一个示例正文:

--BOUNDARY
Content-Disposition: form-data; name="paramname"; filename="foo.txt"
Content-Type: text/plain

... file contents here ...
--BOUNDARY--
Run Code Online (Sandbox Code Playgroud)

由于boundary显而易见的原因,不能出现在文件内容中.

我该怎么做才能创造一个独特的边界?我应该生成一个随机字符串,检查它是否在文件内容中,如果是,则生成一个新的,冲洗并重复,直到我有一个唯一的字符串?或者"相当随机的令牌"(比如时间戳,进程ID等的组合)是否足够?

Ant*_*nes 50

如果您使用像GUID一样随机的东西,则不需要寻找有效负载以检查边界的别名.就像是:-

---- = NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45
标题:....

有效载荷
---- = NextPart_3676416B-9AD6-440C-B3C8-FC66DDC7DB45--

  • 谢谢!你的答案和标记的答案一样好,但他需要的代表比你做的更多;) (3认同)
  • 这个答案更好,因为GUID专门设计为"全球唯一".当您从一行代码中获取GUID时,为什么要尝试提出自己的随机字符串? (3认同)

小智 12

对于Java人员:

protected String generateBoundary() {
             StringBuilder buffer = new StringBuilder();
             Random rand = new Random();
             int count = rand.nextInt(11) + 30; // a random size from 30 to 40
             for (int i = 0; i < count; i++) {
             buffer.append(MULTIPART_CHARS[rand.nextInt(MULTIPART_CHARS.length)]);
             }
             return buffer.toString();
        }

private final static char[] MULTIPART_CHARS =
             "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
                  .toCharArray();
Run Code Online (Sandbox Code Playgroud)

参考网址:http://hc.apache.org/httpcomponents-client-ga/httpmime/xref/org/apache/http/entity/mime/MultipartEntity.html